設計模式之:簡單工程模式+策略模式

1. 簡單工廠模式

1.1要點
  1. 對於一組相關的策略類:使用接口+多個實現類
  2. 使用簡單工廠創建策略類, 將具體類對客戶代碼封裝
1.2 代碼
public interface IStrategy{
	public void run();
} 
public class StrategyA implements IStrategy{
	public void run(){
		//具體策略
	}
}
public class StrategyB implements IStrategy{
	public void run(){
		//具體策略
	}
}
public class StrategyFactory{
	public static IStrategy create(String strategy){
		if(strategy.equals("A"))
			return new StrategyA();
		else if(strategy.equals("B))
			return new StrategyB();
		else
			throw IllegalArgumentException("暫不支持策略:" + strategy);
	}
}
public class Main{
	public static void main(String[] args){
		IStrategy strategy = StrategyFactory.create(args[0]);
		strategy.run();
	}
}
1.3 總結

將具體策略類向客戶隱藏. 如果需要擴展策略,僅需提供新策略的實現,並在策略工廠中增加對新策略的支持.

2 簡單工廠方法+策略模式

2.1 要點

對工廠方法進行修改,在簡單工廠模式中,工廠僅僅負責創建策略對象.策略的具體執行需要通過返回的策略對象進行相應方法調用.

通過將簡單工廠方法與策略模式相結合,構建策略上下文類,該類可以通過傳入的策略類別構造對應的實際策略,並提供具體策略方法的執行.

2.2 代碼

IStrategy, StrategyA, StrategyB定義與簡單工廠方法中一致

public class StrategyContext{
	private IStrategy strategy;
	public StrategyContext(String strategy){
		if(strategy.equals("A))
			this.strategy = new StrategyA();
		else if(strategy.equlas("B"))
			this.strategy = new StrategyB();
		else
			throw new IllegalArgumentException("暫不支持策略:"+strategy);
	}
	public void run(){
		strategy.run();
	}
}
public class Main{
	public static void main(String[] args){
		StrategyContext strategy = new StrategyContext(args[0]);
		strategy.run();
	}
}
2.3 總結

通過將簡單工廠方法與策略模式相結合,對用戶端僅需暴露一個類即可.進一步提供了客戶端調用的透明性.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章