<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 0, 文章 - 1, 評論 - 0, 引用 - 0
    數據加載中……

    【轉】Java策略模式

    1.策略模式概念
        策略模式(Strategy Pattern)體現了兩個非常基本的面向對象設計原則。
        1> 封裝變化概念 ;
        2> 編程中使用接口,而不是對接口的實現,即面向接口編程。
    2.定義:
        1> 定義一組算法,將每個算法都封裝起來,并且使他們之間可以作為組建互相替換;
        2> 策略模式使這些算法在客戶端調用它們的時候能夠互不影響的變化。
    3.意義:
        1> 策略模式使開發人員能夠開發出由許多可替換的部分組成的軟件,并且各部分之間是
        松耦合的關系;
        2> 若連接的特性是軟件具有更強的可擴展性,易于維護;更重要的是,他大大提高了軟件
        的可重用性。
    4.策略模式的組成:
        1> 抽象策略角色:策略類,通常由一個接口或者抽象類實現;
        2> 具體策略角色:包裝了相關的算法和行為,由實現接口或抽象類的類完成;
        3> 環境角色:持有一個策略類的引用,最后給客戶端調用。
    5.策略模式的實現:
        1> 策略模式的用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立類中,
        從而使得它們可以相互替換;    
        2> 策略模式使得算法可以在不影響客戶端的情況下發生變化。使用策略模式可以把
        行為和環境分割開來;
        3> 環境類負責維持和查詢行為類,各種算法則在具體策略中提供。由于算法和環境
        相獨立,算法的修改都不會影響環境和客戶端。
    6.編寫步驟:
        1> 對策略對象定義一個公共接口(抽象策略角色);
        2> 編寫各種策略類,該類實現了上面的公共接口(具體策略角色);
        3> 在使用策略對象的類中保存一個策略對象的引用(環境角色);
        4> 在使用策略對象的類中,實現對策略對象的set和get方法(注入)或者使用構造方法完成賦值

    例1:
    Strategy.java(抽象策略角色,接口實現)
    package cn.edu.bupt.strategy;

    public interface Strategy {
        int calculate(int a, int b);
    }
    (具體策略角色,分為兩個實現類,如下)
    AddStrategy.java
     1 package cn.edu.bupt.strategy;
     2 
     3 public class AddStrategy implements Strategy {
     4 
     5     @Override
     6     public int calculate(int a, int b) {
     7         return a + b;
     8     }
     9 
    10 }
    11 
    SubstractStrategy.java
     1 package cn.edu.bupt.strategy;
     2 
     3 public class SubstractStrategy implements Strategy {
     4 
     5     @Override
     6     public int calculate(int a, int b) {
     7         return a - b;
     8     }
     9 
    10 }
    11 
    (環境角色,持有接口的引用但是沒有接口的具體實現類,即面向接口編程,擁有setters 和 getters)
    Environment.java
     1 package cn.edu.bupt.strategy;
     2 
     3 public class Environment {
     4     private Strategy stra;    //Strategy類型,面向接口編程
     5 
     6     public Environment(){
     7         super();
     8     }
     9     public Environment(Strategy stra) {
    10         super();
    11         this.stra = stra;
    12     }
    13 
    14     public Strategy getStra() {
    15         return this.stra;
    16     }
    17 
    18     public void setStra(Strategy stra) {
    19         this.stra = stra;
    20     }
    21     
    22     public int calculate(int a, int b) {
    23         return this.stra.calculate(a, b);
    24     }
    25 }
    26 
    (客戶端,持有環境類,但是需要通過使用setters 和 getters向環境類中傳入具體的算法,即策略具體實現類)
    Client.java
     1 package cn.edu.bupt.strategy;
     2 
     3 public class Client {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         int a = 3;
    11         int b = 4;
    12         //實例化環境決策,完成相關的運算
    13         Environment env = new Environment();
    14         
    15         //傳入減法策略,執行減法運算
    16         env.setStra(new SubstractStrategy());
    17         System.out.println(env.calculate(a, b));
    18         
    19         //傳入加法策略,執行加法運算
    20         env.setStra(new AddStrategy());
    21         System.out.println(env.calculate(a, b));
    22     }
    23 
    24 }
    策略模式的缺點:
        1> 客戶端必須知道所有的實現算法的具體策略類,并自行解決使用哪個策略類;
        2> 會造成很多的抽象類。

    posted on 2012-01-30 19:11 阿童沐 閱讀(85) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲日韩国产精品乱| 亚洲狠狠婷婷综合久久| 免费看成人AA片无码视频吃奶| 国产色婷婷精品免费视频| 亚洲天堂福利视频| 无码成A毛片免费| 亚洲精品你懂的在线观看| 乱爱性全过程免费视频| 免费一级一片一毛片| 亚洲AV永久无码精品网站在线观看| **俄罗斯毛片免费| 亚洲AV电影院在线观看| 91视频免费观看高清观看完整| 亚洲日本韩国在线| 人人鲁免费播放视频人人香蕉| 又粗又黄又猛又爽大片免费| 久久精品国产亚洲av瑜伽| 在线观看视频免费国语| 亚洲熟妇av一区| 久久精品国产免费观看| 久久综合亚洲色一区二区三区| 日韩免费无码一区二区三区| 久久亚洲国产伦理| 久久国产精品免费专区| 久久精品亚洲综合一品| 久久久久免费精品国产小说| 亚洲国产精品嫩草影院在线观看| 成人毛片100免费观看| 国产亚洲一区二区在线观看| 国产免费无码一区二区| 久久精品亚洲一区二区 | 国产三级在线免费| 国产亚洲婷婷香蕉久久精品| 免费看无码特级毛片| 久久国产精品亚洲综合| 免费A级毛片av无码| 亚洲天堂一区在线| 大地资源在线观看免费高清| 亚洲人成自拍网站在线观看| 国产极品美女高潮抽搐免费网站 | 毛片免费在线观看|