学習設計モードのstrategyモード(ポリシーモード)


大きな記事を引用:
JAva設計モードは
ポリシー・モードは、指定された入力条件の下で、ターゲットの計画またはシナリオを実現します.ポリシーはアルゴリズムと似ています.アルゴリズムは、入力のセットを提供して出力を生成するプロセスを定義します.ポリシーは計画であり、出力のセットに入力する方法も含まれます.通常、ポリシーは、アルゴリズムに比べてより広い範囲を提供することができるオプションのスキームである.したがって、ポリシーは、通常、1つのグループまたはクラスタが互いに置換されるスキームを表す.コンピュータプログラムに複数のポリシーがある場合、プログラムコードは複雑になります.複数のポリシーが使用可能である場合、ポリシーに関連するプログラムロジックは、ポリシー選択のプログラムコードが複雑になる可能性があり、ポリシーのロジックも複雑になる可能性があります.これらのコードを整理するには、ポリシーモードを使用します.ポリシー操作はポリシーの入力と出力を定義し、ポリシーの実装作業を各クラスに残す.これらのクラスは、ユーザに同じインタフェースを提供する異なるスキームで同じ操作を実現し、これらのクラスは互いに置換することができる.ポリシー・モードでは、コードが混乱することなく、複数のポリシーが共存できます.ポリシーモードは、モード選択ロジックとポリシー自体の分離を実現することもできる.
 
 
オプションのポリシーまたはシナリオを異なるクラスにカプセル化し、これらのクラスで共通の操作を実現することを意図しています.
 
例は比較的簡単です.
現在、4つのポリシーがユーザーに選択できる場合は、ユーザーの状況に応じて選択します.ポリシー計画が簡単であればアルゴリズム方法を採用するのは簡単ですが、ポリシーが複雑であれば、ポリシーを採用してコードを管理するのは賢明です.
1.Stratery.java
package com.xuyi.strategy;

/**
 * @author xuyi
 *      
 */
public class Stratery {
	
	String stratery;
	
	public Stratery(String stratery){
		this.stratery=stratery;
	}
}

 2.interface Advisor
package com.xuyi.strategy;

/**
 * @author xuyi
 *       ,           ,      toString
 */
public interface Advisor {
	public String toDo();
}

 3.Stratery1.java
package com.xuyi.strategy;

/**
 * @author xuyi
 *   1
 */
public class Stratery1 extends Stratery implements Advisor {

	public Stratery1(String stratery) {
		super(stratery);
	}


	public String toDo() {
		return stratery;
	}
	
	

}

 Stratery2.java
package com.xuyi.strategy;

/**
 * @author xuyi
 *   2
 */
public class Stratery2 extends Stratery implements Advisor {

	public Stratery2(String stratery) {
		super(stratery);
	}

	public String toDo() {
		return stratery;
	}
	
	

}

 4.Test.java
package com.xuyi.strategy;

//strategy  -    :                       ,               。
public class Test {
	public static Advisor getAdvisor(int i){
		switch(i){
		 case 1:return new Stratery1("  1");
		 case 2:return new Stratery2("  2");
		 default:return null;
		}
	}
	
	public static void main(String[] args) {
		System.out.println("  :"+getAdvisor(1).toDo());
	}
}

 5.可視ポリシー1と2は、共通のアクションtoDo()を実現します.