戦略モード(Strategy)----行動ノート

1876 ワード

一:関連する役:1、環境役(Context):Strategyクラス(抽象アルゴリズムクラス)参照2、抽象策略(Strategy):インタフェースor抽象クラス3、具体的な策略(ConcreteStrategy)包装関連アルゴリズムまたは行為注意:共通コード(共通行為)を持って、コードをStrategy抽象クラスに移動することができる!
二、いつどんな具体的な策略を使いますか.ポリシーモードはこの決定を担当しないで、クライアントが自分で決定しなければなりません!欠点:クライアントがすべての具体的なアルゴリズムや動作を知るのに適しているだけで、2、多くのポリシークラスをもたらす
三、どのような場合にポリシーモード1を使用するか、システムには多くのクラスがあり、違いはそれらの動作であり、ポリシーモードを使用すると、1つのオブジェクトに多くの動作の中で1つの動作2を選択させることができ、システムはいくつかのアルゴリズムの中で1つを動的に選択する必要がある.アルゴリズムを1つ1つの具体的なアルゴリズムクラス3、システムアルゴリズムが使用している重要なデータをクライアントに知らせることはできません.4、1つのオブジェクトには多くの行為があり、条件選択文を用いて実現を選択する
 
 
 
環境ロール(Context):
        
//    
public class Context {
	Strategy strategy;	//    (   )
	public void sum(){
		strategy.doSum();
	}

	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}

	public static void main(String[] args) {
		Context context = new Context();
		Strategy strategyA = new ConcreteStrategyA();	//     A
		context.setStrategy(strategyA);
		context.sum();
		
		Strategy strategyB = new ConcreteStrategyB();	//     B
		context.setStrategy(strategyB);
		context.sum();
				
	}
}

抽象戦略(Strategy):
//    (   )
public abstract class Strategy {
	
	public abstract void doSum(); //    
}

具体的な策略(ConcreteStrategy)A
public class ConcreteStrategyA extends Strategy{
	@Override
	public void doSum() {
		System.out.println("    A: "+ (1 + 1));
	}
}

具体的な策略(ConcreteStrategy)B
 
public class ConcreteStrategyB extends Strategy{
	@Override
	public void doSum() {
		System.out.println("    B: "+ (2 + 2));
	}
}