Java Strategy Pattern(ポリシーモード)
2286 ワード
ポリシー・モード(Strategy Pattern)では、クラスの動作またはそのアルゴリズムを実行時に変更できます.このタイプの設計モードは、動作モードに属します.ポリシー・モードでは、ポリシー・オブジェクトの変更に伴って様々なポリシーを表すオブジェクトと、ポリシー・オブジェクトの変更に伴って動作が変化するcontextオブジェクトを作成します.ポリシー・オブジェクトはcontextオブジェクトの実行アルゴリズムを変更します.
キーコード:同じインタフェースを実装します.
利点:1、アルゴリズムは自由に切り替えることができます.2、多重条件判断を避ける.3、拡張性が良い.短所:1、戦略類が増える.2、すべての戦略類は対外暴露が必要である.
注意:1つのシステムのポリシーが4つ以上ある場合は、ハイブリッドモードを使用して、ポリシークラスの膨張の問題を解決することを考慮する必要があります.インタフェースを作成します. は、実装インタフェースのエンティティクラスを作成する. Contextクラスを作成します. Contextを使用して、ポリシーStrategyを変更したときの動作の変化を表示します. 印刷結果
キーコード:同じインタフェースを実装します.
利点:1、アルゴリズムは自由に切り替えることができます.2、多重条件判断を避ける.3、拡張性が良い.短所:1、戦略類が増える.2、すべての戦略類は対外暴露が必要である.
注意:1つのシステムのポリシーが4つ以上ある場合は、ハイブリッドモードを使用して、ポリシークラスの膨張の問題を解決することを考慮する必要があります.
/**
* 1.
* @author mazaiting
*/
public interface Strategy {
/**
*
*/
int doOperation(int num1, int num2);
}
/**
* 2. 。
* @author mazaiting
*/
public class OperationAdd implements Strategy{
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
/**
* 2. 。
* @author mazaiting
*/
public class OperationSub implements Strategy{
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
/**
* 2. 。
* @author mazaiting
*/
public class OperationMult implements Strategy{
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
/**
* 3. Context 。
* @author mazaiting
*/
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return strategy.doOperation(num1, num2);
}
}
/**
* 4. Context Strategy 。
* @author mazaiting
*/
public class Client {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSub());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationMult());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50