JDP 02-[ポリシーモード]-よくわかりません



ポリシー・モードは、指定された入力条件の下で、ある目標を実現する計画またはシナリオです.ポリシーはアルゴリズムと似ています.アルゴリズムは、入力のセットを提供して出力を生成するプロセスを定義します.ポリシーは計画であり、出力のセットに入力する方法も含まれます.通常、ポリシーは、アルゴリズムに比べてより広い範囲を提供することができるオプションのスキームである.したがって、ポリシーは、通常、1つのグループまたはクラスタが互いに置換されるスキームを表す.
コンピュータプログラムに複数のポリシーがある場合、プログラムコードは複雑になります.複数のポリシーが使用可能である場合、ポリシーに関連するプログラムロジックは、ポリシー選択のプログラムコードが複雑になる可能性があり、ポリシーのロジックも複雑になる可能性があります.これらのコードを整理するには、ポリシーモードを使用します.
ポリシー操作はポリシーの入力と出力を定義し、ポリシーの実装作業を各クラスに残す.これらのクラスは、ユーザに同じインタフェースを提供する異なるスキームで同じ操作を実現し、これらのクラスは互いに置換することができる.ポリシー・モードでは、コードが混乱することなく、複数のポリシーが共存できます.ポリシーモードは、モード選択ロジックとポリシー自体の分離を実現することもできる.
オプションのポリシーまたはシナリオを異なるクラスにカプセル化し、これらのクラスで共通の操作を実現することを意図しています.
例は比較的簡単です.
現在、4つのポリシーがユーザーに選択できる場合は、ユーザーの状況に応じて選択します.ポリシー計画が簡単な場合はアルゴリズム方法を採用するのが簡単ですが、ポリシーが複雑な場合は、ポリシーを採用してコードを管理するのが賢明です.
伝統的な方法に直面して、私たちは多くの場合、プロセス向けの方法を採用して実現します.
次のような戦略があります.
 
/*
 *@author junin
 */
public class Stratery {
protected String stratery;
public Stratery(String stratery){
this.stratery = stratery;
}
}
/*
 *   1
 *@author junin
 */
public class Stratery1 extends Stratery {
public Stratery1(String stratery){
super(stratery);
}
}
/*
 *   2
 * @author junin
 */
public class Stratery2 extends Stratery{
public Stratery2(String stratery){
super(stratery);
}
}
/*
 *   3
 * @author junin
 */
public class Stratery3 extends Stratery{
public Stratery3(String stratery){
super(stratery);
}
}
 
 
従来の実装方法は次のとおりです.
 
public static Stratery get(int cas){
switch (cas) {
case 1:
return new Stratery1("  1");
case 2:
return new Stratery2("  2");
case 3:
return new Stratery1("  3");
default:
return null;
}
}

ユーザーの状況に応じて戻ります.
 
 
次に上のコードのみを再構築しstrategyモードにする
共通のインタフェースを定義します.
 
public interface Advisor {
public Stratery getAdvisor();
}

 
各ポリシー・スキームは、このインタフェースを実装します.
 
/*
 *   1
 * @author junin
 */
public class Stratery1 extends Stratery implements Advisor{
public Stratery1(String stratery){
super(stratery);
}
public Stratery1 getAdvisor() {
// TODO Auto-generated method stub
return this;
}
public String toString(){
return stratery;
}
}

 
最後に、インタフェースを使用してポリシー呼び出しを実行します.
 
public class New {
public static Advisor getAdvisor(int cas) {
switch (cas) {
case 1:
return new Stratery1("  1").getAdvisor();
case 2:
return new Stratery2("  2").getAdvisor();
case 3:
return new Stratery3("  3").getAdvisor();
default:
return null;
}
}
public static void main(String[] args) {
Advisor a = getAdvisor(1);
System.out.println(a);
}
}

再構築の核心思想は、1つの操作を関連するクラスのセットに分散することである.