この記事では、Javaポリシーパターンの定義と使用法について説明します。次のように、参照のために共有してください。
1。定義:
一連のアルゴリズムを定義し、それらを1つずつカプセル化し、互いに交換できるようにします。
2。利点:
(1)コンテキストと特定の戦略は大まかに結合されているため、コンテキストはどのインスタンスが戦略インターフェイスクラスを実装するために使用したいインスタンスを知る必要がありますが、どのクラスであるかを知る必要はありません。
(2)ポリシーモデルは、開閉の原則を満たしています。新しい特定のクラスを追加するとき、コンテキストクラスのコードを変更する必要はありません。コンテキストは、新しい特定のポリシーのインスタンスを参照できます。
iii。例:
以下は、質問による戦略モデルの詳細な説明です。
実験要件:
Xiao DingはAlibabaのプログラマーです。この日、プロジェクトマネージャーは彼にクラスの定義を与えました
パブリッククラスワーカー{int id;文字列名; int age;}Xiao Dingは、これが数字、名前、年齢などを含む労働者の定義ではないことを見ました。
マネージャーは、労働者のグループの中で最も古いものを見つけることができる機能を書く必要があると言いました。メソッド宣言は(またはこのようなもの)です。
労働者検索ワーカー(リスト<ワーカー>労働者);
パラメーターList<Worker> workersこの労働者のバッチのデータです。最古の労働者が見つかった場合、ワーカーオブジェクトが返されます。労働者にノードがない場合は、nullを返します。
答え:
1。戦略
ポリシーモードでは、このインターフェイスの名前はWorktrategy(特定の質問では、特定の質問に従って名前を付けます)、コードは次のとおりです。
worktrategy.java
java.util.list; public interface worktrategy {public Worker ageaverage(list <worker> list);}2。コンテキスト
コンテキスト指向のポリシーは、どちらもインターフェイス指向のクラスです。コードは次のとおりです。
maxage.java
java.util.list; public class maxage {workstrategy workstrategy; public void setworkstrategy(workstrategy workstrategy){this.workstrategy = workstrategy; } public Worker getFindMax(list <worker> list){if(worktrategy!= null)return worktrategy.ageaveray(list); else {return null; }}}3。特定の戦略
具体的な戦略は、Workstrategy Interfaceクラスを実装することです。つまり、インターフェイス内の抽象的なワーカーを書き直す必要があります。
ageaverage(list <worker> list)メソッド
コードは次のとおりです。
StrategyMaxage.java
import java.util.list; public class Strategymaxageはworktrategy {@override public Worker ageaverage(list <worker> list){int fs [] = new int [list.size()]; int maxage = 0; for(int j = 0; j <list.size(); j ++){fs [j] = list.get(j).getage(); if(fs [maxage] <= fs [j]){maxage = j; }} return list.get(maxage); }}4。ポリシーモードの使用
Application.java
import java.util.arraylist; Import java.util.list; public class application {public static void main(string [] args){list <worker> list = new ArrayList <>(); list.add(新しい労働者(1、 "Zhang San"、30)); list.add(新しい労働者(2、 "li si"、40)); list.add(New Worker(3、 "Wang Wu"、33)); maxage findage = new Maxage(); findage.setworkstrategy(new StraptyMaxage());ワーカーfindw = indage.getFindmax(list); system.out.println( "wulin.comテスト結果:"); System.out.println( "The atest worker:"+findw.getid()+""+findw.getname()+""+findw.getage()); }} class Worker {int id;文字列名; int age; public int getid(){return id; } public void setid(int id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } public int getage(){return age; } public void Setage(int age){this.age = age; } public Worker(int id、string name、int age){super(); this.id = id; this.name = name; this.age = age; } public Worker(){super(); // TODO自動生成コンストラクタースタブ}}5。操作結果:
Java関連のコンテンツについては、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの概要」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。