デザインパターンを学ぶ - Strategyパターン

戦略モード

まず、定義

   アルゴリズムのセットを定義し、各アルゴリズムは、一緒に包装され、それらは前に相互に変換することができるようになっています。(各1をカプセル化し、アルゴリズムのファミリーを定義し、それらを交換します。)

 

 第二に、理解

   彼らはお互いを置き換えることができるように別々の抽出挙動は、単独で、それぞれのインタフェースの定義を変更し、対応する動作をカプセル化します。

  

  1.コンテキストコンテキストの役割

    高レベル戦略淀アルゴリズムへの直接アクセスを遮断役割を、接続パッケージので、パッケージが変更される可能性

  2.戦略戦略インタフェース

    ポリシーのインターフェイスを定義

  3. ConreteStrategy具体的な戦略

     特定のアルゴリズムをカプセル化するための実装戦略インターフェース

 

 第三に、たとえば、

  

  3.1)ポリシーを定義するためのインタフェース

/ ** 
 *策略
 * @author TimFruit 
 * @date 2019年5月21日7時40分
 * / 

パブリック インターフェイスIAlgorithm { 

    INT doOperate(INT NUM1、INT NUM2)。
    
}

   

  3.2)インターフェイスの実装戦略

パブリック クラスの追加を実装しIAlgorithm { 
    @Override 公共 int型 doOperate(int型 NUM1、int型からnum2){
         戻り NUM1 + NUM2を。
    } 
}

 

パブリック クラス乗算を実装IAlgorithm { 
    @Override 公共 INT doOperate(INT NUM1、INT NUM2){
         戻り NUM1の*のNUM2と、
    } 
}

 

   3.3)を達成コンテキスト

/ ** 
 *上下文、承载算法
 * 
 * @author TimFruit 
 * @date 2019年5月21日午前8時03分
 * / 

パブリック クラス電卓{ 
    IAlgorithmアルゴリズム。

    公共電卓(IAlgorithmアルゴリズム){
         この .algorithm = アルゴリズム。
    } 
    
    公共 int型 EXEC(INT NUM1、INT NUM2){
         戻りalgorithm.doOperate(NUM1、NUM2)を、
    } 
}

 

  3.4)テストシナリオ

パブリック クラスクライアント{
     公共 静的 ボイドメイン(文字列[]引数){ 
        IAlgorithmアルゴリズム = 新規追加(); 
        
        電卓電卓 = 新しい電卓(アルゴリズム)。
        
        int型 NUM1 = 1 ;
        int型からnum2 = 3 ;
        int型の結果= calculator.exec(NUM1、NUM2)。
        System.out.println( "结果为:" + 結果)。
    } 
}

 

 

 四のディアン戦略の列挙

  

/ ** 
 *戦略の列挙
 * 
 *非常に良いが、一般的に役割が頻繁に変更されないため、限られたため、列挙型(非常に悪いT_Tを拡張)の
 * 
 * @author TimFruit 
 * 8 @date 2019年5月21日:12である
 * / 

パブリック 列挙  電卓{ 
    
    ADD { 
        @Override INT Execの(INT NUM1、INT NUM2){
             戻り NUM1 + NUM2; 
        } 
    }、
    SUBは{ 
        @Override INT Execの(INT NUM1、INT NUM2){
             戻り num1- 、NUM2を
        } 
    } 、
    MULTIPLY { 
        @Override INT EXEC(INT NUM1、INT NUM2){
             戻り NUM1の*のNUM2。
        } 
    }。
    
    
    
    抽象 int型のexec(int型 NUM1、int型からnum2); 
    
}

 

  テスト環境:

パブリック クラスクライアント{ 

    公共 静的 ボイドメイン(文字列[]引数){
         int型 NUM1 = 1 int型からnum2 = 3 ; 
        
        int型の結果= Calculator.ADD.exec(NUM1、NUM2)。
        System.out.println( "结果为:" + 結果)。
    } 
    
}

 

 

 教材:

  <禅デザインパターン>

 

 

 

おすすめ

転載: www.cnblogs.com/timfruit/p/11121410.html