淺析幾種設計模式--策略模式

策略模式是對算法的包裝,把使用算法的責任和算法自己分隔開,委派給不一樣的對象管理。策略模式一般把一系列的算法包裝到一系列的策略類裏面,做爲一個抽象策略類的子類。算法

做用ide

將算法的責任和自己進行解耦,使得:spa

1.算法可獨立於使用外部而變化設計

2.客戶端方便根據外部條件選擇不一樣策略來解決不一樣問題orm

策略模式僅僅封裝算法(包括添加 & 刪除),但策略模式並不決定在什麼時候使用何種算法,算法的選擇由客戶端來決定。對象

實例繼承

背景:有一家百貨公司,最近在定年度的促銷活動接口

衝突:每一個節日用同一個促銷活動太枯燥,沒吸引力it

解決方案:針對不一樣節目使用不一樣促銷活動進行促銷class

步驟1:

定義抽象策略角色(Strategy):百貨公司全部促銷活動的共同接口

public abstract class Strategy {	public abstract void showActivity();	}

步驟2:

定義具體策略角色(Concrete Strategy):

如下是每一個具體活動

//爲春節準備的促銷活動A	class StrategyA extends Strategy{	@Override	public void showActivity() {	System.out.println("春節促銷活動A");	}	}		//爲中秋節準備的促銷活動B	class StrategyB extends Strategy{		@Override	public void showActivity() {	System.out.println("中秋節促銷活動B");	}	}	//爲聖誕節準備的促銷活動C	class StrategyC extends Strategy{		@Override	public void showActivity {	System.out.println("聖誕節促銷活動C");	}	}

步驟3:

定義環境角色(Context):用於鏈接上下文,即把促銷活動推銷給客戶,這裏能夠理解爲銷售員

class Context_SalesMan{	private Strategy strategy;//持有抽象策略角色的引用	//生成銷售員實例時告訴銷售員什麼節日(構造方法)	//使得讓銷售員根據傳入的參數(節日)選擇促銷活動(這裏使用一個簡單的工廠模式)	public SalesMan(String festival) {	switch ( festival) {	case "A":    //春節就使用春節促銷活動	strategy = new StrategyA();	break;	case "B":   //中秋節就使用中秋節促銷活動	strategy = new StrategyB();	break;	case "C":  //聖誕節就使用聖誕節促銷活動	strategy = new StrategyC();	break;	}	    }
//向客戶展現促銷活動	public void SalesManShow(){	strategy.showActivity();	    }
public class StrategyPattern {	public static void main(String[] args){	Context_SalesMan mSalesMan ;		//春節來了,使用春節促銷活動	System.out.println("對於春節:");	mSalesMan =  new Context_SalesMan("A");	mSalesMan.SalesManShow();		//中秋節來了,使用中秋節促銷活動	System.out.println("對於中秋節:");	mSalesMan =  new Context_SalesMan("B");	mSalesMan.SalesManShow();		//聖誕節來了,使用聖誕節促銷活動	System.out.println("對於聖誕節:");	mSalesMan =  new Context_SalesMan("C");	mSalesMan.SalesManShow();	}	}

運行結果:

640?wx_fmt=png

640?wx_fmt=png

總結

優勢

策略類之間能夠自由切換

因爲策略類都實現同一個接口,因此使它們之間能夠自由切換。

易於擴展

增長一個新的策略只須要添加一個具體的策略類便可,基本不須要改變原有的代碼,符合「開閉原則「

避免使用多重條件選擇語句(if else),充分體現面向對象設計思想。

缺點

客戶端必須知道全部的策略類,並自行決定使用哪個策略類。

策略模式將形成產生不少策略類,能夠經過使用享元模式在必定程度上減小對象的數量。

策略模式的本質:少用繼承,多用組合

相關文章
相關標籤/搜索