java設計モードの策略モード
4790 ワード
java設計モードの策略モード1、何が策略モードですか?戦略モードは、アルゴリズムクラスタモードとも呼ばれ、異なるアルゴリズム族を定義し、相互に置換することができ、このモードはアルゴリズムの変化をアルゴリズムを使用するクライアントと独立させる.2,策略のモードはどんな利益がありますか? 戦略パターンの利点は、オブジェクトの行動を動的に変えることができます.3,設計の原則 設計の原則は一つのクラスの中で常に変化したり、将来変えるかもしれない部分を抽出して、一つのインターフェース(c+zの中で虚の種類を使うことができます)として、そしてクラスの中でこの対象の実例を含んで、このような種類の実例は運行時に自由にこの接続を実現した類の行為を呼び出せます.次は一例です. 戦略モードは対象行動型モードに属し、主にアルゴリズムのセットに対して、各アルゴリズムを共通インターフェースを持つ独立したクラスにカプセル化し、それらを相互に置換できるようにする.ポリシーモードは、アルゴリズムをクライアントに影響を与えずに変化させることができる.一般的に、ポリシーモードは、1つのアプリケーションが特定のサービスまたは機能を実現する必要があり、また、このプログラムが様々な実施形態を有する場合に適用される.4、ポリシーモードには3つのオブジェクトがあります.(1) 環境オブジェクト:このクラスでは、抽象的なポリシーで定義されたインターフェースまたは抽象的なクラスへの参照が実現されます.(2) 抽象的な戦略オブジェクト:インターフェースまたは抽象的なクラスによって実現することができます.(3) 具体的な戦略の対象:それは同じ機能ではない異なるアルゴリズムを実装した.ポリシーモードを利用してアプリケーションを構築し、ユーザー構成などに応じて、異なるアルゴリズムを選択してアプリケーションの機能を実現することができます.具体的に環境オブジェクトを選択して完成します.このような方式を採用すると、条件文の使用によるコードの混乱を回避し、アプリケーションの柔軟性と合理性を高めることができます.5,応用シーン例:劉備は江東に妻を迎えに行きます.出発前に諸葛亮は趙雲に三つの絶妙な策略を与えました.天機で分解すれば難問を解決できると言っています.まあ、大きな問題はもちろん、最後に周瑜が妻と一緒にまた兵を折ったので、この場面を見てみましょう.まずこのシーンの要素を言います.三つの妙策、一つの錦嚢、一つの趙雲、妙策は亮兄からもらったのです.妙策は錦嚢の中に置いて、通称は錦嚢の妙策です.趙雲は仕事をする人です.錦嚢から妙策を取り出して、実行して、勝利します.javaプログラムでこれらをどう表現しますか?まず図を見に来ますか?
, :
Java
package com.yangguangfu.strategy;
/**
*
* @author [email protected]:
* , 。
*/
public interface IStrategy {
// 。
public void operate();
}
, :
: :
Java
package com.yangguangfu.strategy;
/**
*
* @author [email protected]:
* , 。
*/
public class BackDoor implements IStrategy {
@Override
public void operate() {
System.out.println(" , , ...");
}
}
: , :
Java
package com.yangguangfu.strategy;
/**
*
* @author [email protected]:
* 。
*/
public class GivenGreenLight implements IStrategy {
@Override
public void operate() {
System.out.println(" , !");
}
}
: , :
Java
package com.yangguangfu.strategy;
/**
*
* @author [email protected]:
* , 。
*/
public class BlackEnemy implements IStrategy {
@Override
public void operate() {
System.out.println(" , ...");
}
}
, , , , :
Java
package com.yangguangfu.strategy;
/**
*
* @author [email protected]:
*
*/
public class Context {
private IStrategy strategy;
// ,
public Context(IStrategy strategy){
this.strategy = strategy;
}
public void operate(){
this.strategy.operate();
}
}
, , , , , , , :
Java
package com.yangguangfu.strategy;
public class ZhaoYun {
/**
* , ,
*/
public static void main(String[] args) {
Context context;
//
System.out.println("---------- ---------------");
context = new Context(new BackDoor());
context.operate();//
System.out.println("
");
// ,
System.out.println("---------- , ---------------");
context = new Context(new GivenGreenLight());
context.operate();//
System.out.println("
");
// , ?
System.out.println("---------- , ? ---------------");
context = new Context(new BlackEnemy());
context.operate();//
System.out.println("
");
}
}
: , “ ” ! , , , OCP , , Context.java , , 。