この記事では、学習ソースは清華大学出版社とのデザインパターン、チェン傑に横たわっている、自分自身の学習のまとめです。
多くのモデルは、この高凝集、低カップリングの概念に適合するように設計され、戦略パターンも例外ではありません。
ビジネスを実行する場合は、そのようなプロモーション、割引など、さまざまな実行戦略が、そこにある、フルカットは、特定の販売実務ある償還財、ある程度の量に充填することができます。これらの特定のプロモーションコードの動作では、異なるロジックコードでなければなりません。フロントバックエンドのコードを単純に分類され、それはビジネス層に属し、バックエンドのコードに属している必要があります。
あなたは、低カップリングのデザインコンセプトに準拠したい、とした場合、呼び出し元のコードプロモーション活動は、好ましくは言葉だけ、できるだけ簡単であるべきフロントエンドいます。
Strategyパターンは、上記のシナリオのニーズを満たすのは、戦略パターンUMLダイアグラムを見てみましょうすることです。
contextInterfaceは()それは、フロントエンドは、前と目的の分離の終了後に達成するための戦略を実行するための呼び出し、この方法を統一することができますどのような戦略を実行するかどうかを、具体的な戦略を実行するために呼ばれるフロントエンドのためにあるコンテキスト宣言されたオブジェクトの戦略抽象クラス、 。Contextクラスは、フロントエンドの呼び出しやデザインの便宜のためです。次のようにコンテキストコードがあります。
public class Context{
private Strategy strategy;
//Context的构造函数,传进具体的Strategy,就能得到具体的执行策略
public Context() {Strategy strategy) {
this.strategy = strategy;
}
//前端传进具体的Strategy,然后统一调用该方法,而不用根据策略的不同调用的方法名也不同
public static void contextInterface(){
strategy.algorithmInterface();
}
}
戦略クラスコードは次のよう
public abstract class Strategy{
public abstract void AlgorithmInterface();
}
具体的な戦略クラスは、次のようにコードがあり、戦略を継承します。
public class ConcreteStrategyA{
public void algorithmInterface(){
//定义具体的策略
}
}
どんなに次のように、均一に書き込むことができますどのような戦略を使用するには、設計、フロントエンドのコード
Context context = new Context(new ConcreteStrategyA());
context.concreteInterface();
最後に、合計する、ポリシーモードは、均一なコードで先端が異なる政策アプローチを呼び出しできるようにすることです。プロモーションのちょうど例は抽象的な戦略、割引、具体的な行動戦略方程式の完全な減少であるように、これらの戦略は、特定の実装方法抽象的な戦略でなければなりません。
実際には、ポリシーは、特定のポリシークラスのコードがファクトリメソッドによって得ることができ、それを最適化することができ、私は別の記事に工場を見ることができます。
https://blog.csdn.net/sinat_38393872/article/details/94738356