この記事では、Javaデザインパターンの原則と使用法について説明します。次のように、参照のために共有してください。
ポリシーパターンは、一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、それらを互いに交換可能にします。ポリシーパターンにより、アルゴリズムはそれを使用している顧客から独立して変更できます。その中で、JDKのTreesetクラスとTreemapクラスはポリシーパターンを使用しています。これらの2つのクラスはソートされたコレクションクラスであり、ソートルールはポリシーパターンで定義された一連のアルゴリズムと同等であり、コレクションクラスは、ユーザーが使用するポリシーパターンの環境クラスと同等です。 TreesetとTreemapがソートされていることを知っているだけです。ソートする方法については、ソートアルゴリズムによって決定されます。
戦略モデルは、抽象的なポリシーの役割、特定のポリシーの役割、環境役割の3つの部分で構成されています。
抽象的なポリシーの役割:通常、インターフェイスまたは抽象クラスによって実装されるポリシークラス。
特定の戦略の役割:抽象戦略クラスが実装され、関連するアルゴリズムと動作がパッケージ化されます。
環境の役割:ポリシークラスへの参照を保持し、最終的にクライアントに呼び出されます。
これが単純なポリシーパターンコードの例です。
1。抽象戦略の役割:インターフェイス戦略を定義します。
パッケージcom.test;/** *戦略パターン抽象ロール * @author zhouwen * */public interface戦略{public int calculate(int a、int b);}2。特定の戦略の役割:戦略インターフェイスを実装します。この例では、追加、減算、乗算、および分割の操作が実装されています。
パッケージcom.test;/***ポリシーモード特定の戦略クラス*追加操作を実装* @author zhouwen**/public class addstrategy実装戦略{@override public int calculate(int a、int b){return a + b; }}パッケージcom.test;/***ポリシーモード固有の戦略クラス*減算操作を実装* @author zhouwen**/public class sptractstrategyは戦略を実装します{@override public int calculate(int a、int b){return a -b; }}パッケージcom.test;/** *ポリシーモード固有の戦略クラス *乗算操作を実装 * @author zhouwen * */publicクラスマルチスラレティの実装戦略{@override public int calculate(int a、int b){return a * b; }}パッケージcom.test;/***ポリシーモード特定の戦略クラス*ディビジョン操作を実装* @author zhouwen**/public class DivideStrategy Implments Strategy {@override public int calculate(int a、int b){return a/b; }}3。環境の役割:環境役割における抽象的な役割の参照を定義し、クライアントが呼び出すための計算方法を公開します。
パッケージcom.test;/** *ポリシーモード環境クラス * @author zhouwen * */public class環境{プライベート戦略戦略;パブリック環境(戦略戦略){this.strategy = Strategy; } //ポリシーパブリックボイドSetStrategy(戦略戦略)を変更するために使用{this.strategy = Strategy; } public Strategy getStrategy(){return Strategy; } //クライアントがpublic int計算を呼び出すためにコンピューティングインターフェイスを公開する(int a、int b){return Strategy.calculate(a、b); }}4.最後にクライアントコードを書きます:
パッケージcom.test; public class client {public static void main(string [] args){addstrategy addstrategy = new addstrategy();環境環境=新しい環境(AddStrategy); system.out.println(環境.calculate(3、4)); SubtractStrategy substategy = new SubtractStrategy(); Environment.Setstrategy(Substrategy); system.out.println(環境.calculate(3、4)); Multiplistragety Multiplystrategy = new MultipLystragety(); Environment.Setstrategy(Multiplystrategy); system.out.println(環境.calculate(3、4)); Dividestrategy Dividestrategy = new Dividestrategy(); Environment.Setstrategy(DivideStrategy); system.out.println(環境.calculate(3、4)); }}要約:
クライアントのSystem.out.println(environment.calculate(3, 4));このコード、どの実装クラスが呼び出されるかはわかりません。環境の役割に渡された特定のポリシークラスを知ることによってのみ、どのクラスを呼び出すかがわかります。これにより、クライアントと特定のポリシーアルゴリズムの分離を実現し、プログラムを簡単に切り替え、理解し、拡張できます。
戦略モデルの利点と短所:
アドバンテージ:
1.ポリシーパターンの目的は、各アルゴリズムを一連のアルゴリズムの共通インターフェイスを使用して独立したクラスにカプセル化し、互いに交換できるようにすることです。例で提供されているように、ポリシーは設定方法に置き換えられます。
2。ポリシーパターンにより、クライアントに影響を与えることなくアルゴリズムが変更されます。ポリシーパターンを使用して、動作を環境から分離します。
3.環境クラスは、動作クラスの維持とクエリを担当し、特定の戦略でさまざまなアルゴリズムが提供されます。アルゴリズムと環境は独立しているため、アルゴリズムの変更は環境とクライアントに影響しません。
欠点:
1.クライアントは、すべてのポリシークラスを知り、自分の裁量で使用するポリシークラスを決定する必要があります。
2。それは多くの戦略を引き起こします。
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。