[Java]無脳理解JAVAポリシーモード


シーン:あるスーパーのレジで、営業員がお客様が購入した商品と数量によってお客様に料金を徴収します.
问题:スーパーマーケットのある时间は割引活动(例えば8割引)、満XXX元XXX元活动、満XXX元XXXポイント活动などがあります.
アルゴリズム類、割引かもしれない、満XXはXXなどを送ります
package com.hebo.test.designmode.strategy;

public abstract class Strategy {
	//    
	public abstract void AlgorithmInterface();
}

割引アルゴリズム実装
package com.hebo.test.designmode.strategy;
/**
 *      
 * @author HeBo
 *
 */
public class ConcreteStrategyA extends Strategy {

	@Override
	public void AlgorithmInterface() {
		System.out.println("      ..");
	}

}

模擬満xx送xx元活動
package com.hebo.test.designmode.strategy;
/**
 *    xx xx   
 * @author HeBo
 *
 */
public class ConcreteStrategyB extends Strategy {

	@Override
	public void AlgorithmInterface() {
		System.out.println(" XX XX     ..");
	}

}

アナログ満XX元送XXポイント
package com.hebo.test.designmode.strategy;
/**
 *    XX  XX  
 * @author HeBo
 *
 */
public class ConcreteStrategyC extends Strategy {

	@Override
	public void AlgorithmInterface() {
		System.out.println(" XX  XX      ..");
	}

}

コンテキスト
package com.hebo.test.designmode.strategy;

public class Context {
	Strategy strategy;
	
	public Context(String type){
		if(type.equals("  ")){
			strategy = new ConcreteStrategyA();
			return;
		}
		if(type.equals("   ")){
			strategy = new ConcreteStrategyB();
			return;
		}
		if(type.equals("   ")){
			strategy = new ConcreteStrategyC();
			return;
		}
	}
	
	//            
	public Context(Strategy strategy){
		this.strategy = strategy;
	}
	//     
	public void ContextInterface(){
		strategy.AlgorithmInterface();
	}
}

テストクラス
package com.hebo.test.designmode.strategy;
/**
 *      
 * @author HeBo
 *
 */
public class Test {

	static Context context;
	
	public static void main(String[] args) {
		
		context = new Context("  ");
		context.ContextInterface();
		
		context = new Context("   ");
		context.ContextInterface();
		
		context = new Context("   ");
		context.ContextInterface();
		
		/*Context            
		 * context = new Context(new ConcreteStrategyA());
		context.ContextInterface();
		
		context = new Context(new ConcreteStrategyB());
		context.ContextInterface();
		
		context = new Context(new ConcreteStrategyC());
		context.ContextInterface();*/
		
	}

}

まとめ:ポリシーモードは一連のアルゴリズムを定義する方法であり、概念的に見ると、これらのアルゴリズムが完成したのはすべて同じ仕事であり、異なることを実現するだけで、すべてのアルゴリズムを同じ方法で呼び出し、各種のアルゴリズムクラスと使用アルゴリズムクラスとの結合を減らすことができる.
戦略モードのStrategyクラスはContextのために一連の再利用可能なアルゴリズムと動作を定義する.もう1つの利点は,ユニットテストを簡略化し,各アルゴリズムには独自のクラスがあり,独自のインタフェースでテストできることである.