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

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

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

    隨筆-48  評論-26  文章-0  trackbacks-0
      策略模式設(shè)計原則(幾乎所有的模式都是如此):

      1.找出應(yīng)用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起。

      2.針對接口編程而不是實現(xiàn).

      3.多用組合,少用繼承.

      策略模式定義:定義了算法族,分別封裝起來,讓它們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶。

      PS:算法族即行為族 

      使用策略模式構(gòu)建一個小應(yīng)用,比如在鳥類中最基本的行為族(也就是算法族) 飛行與鳴叫,而每種鳥的行為甚至都不一致,如果要你寫個程序來演示鳥類(各類別),你該怎么做?

      參看策略模式的定義:定義算法族,分別封裝起來。

      我們可以將飛行與鳴叫的定義封裝成接口,參看代碼:

      /**

     * 飛行基類
     * 
    @author BruceLeey
     
    */
    public interface IFly {

        
    public void fly();

    /**
     * 叫喚基類
     * 
    @author BruceLeey
     
    */
    public interface IYell {

        
    public void yell();
    }

    根據(jù)不同鳥類飛行的特點生成飛行與鳴叫的實現(xiàn),比如:

     /**

     * 麻雀飛行實現(xiàn)類
     * 
    @author BruceLeey
     
    */
    public class MaqFly implements IFly{

        
    public void fly() {
           System.out.println(
    "麻雀飛起來小巧,速度慢!");
        }

    }


    /**
     * 老鷹飛行的實現(xiàn)類
     * 
    @author BruceLeey
     
    */
    public class YingFly implements IFly{

        
    public void fly() {
            System.out.println(
    "老鷹的飛行速度很快,獵物幾乎無處可逃!");
        }

    鳥類中也存在不會飛的鳥,比如鴕鳥

    /**
     * 不會飛
     * 
    @author BruceLeey
     
    */
    public class NowayFly implements IFly{

        
    public void fly() {
            System.out.println(
    "很抱歉,它不會飛!");
        }

      鳴叫的實現(xiàn)也是如此。接下來我們就可以定義鳥類的基本類了。

      /**

     * 鳥類基類
     * 
    @author BruceLeey
     
    */
    public abstract class Bird {

        
    private IFly fly;
        
    private IYell yell;

        
    public void fly() {
            fly.fly();
        }

        
    public void yell() {
            yell.yell();
        }
        
    public abstract void display();  

        
    public void setIFly(IFly fly) {
            
    this.fly = fly;
        }

        
    public IFly getIFly() {
            
    return this.fly;
        }

        
    public void setIYell(IYell yell) {
            
    this.yell = yell;
        }

        
    public IYell getIYell() {
            
    return this.yell;
        }
    }

      算法族由GetSet傾入,在基類中將行為實現(xiàn),但不具體指定,具體指定留由客戶。麻雀類實現(xiàn)如下,其他的寫法亦是如此。

      /**

     * 麻雀
     * 
    @author BruceLeey
     
    */
    public class Maq extends Bird{
        
        @Override
        
    public void display() {
            System.out.println(
    "我是麻雀!!!");
        }

    }  

     在麻雀的實現(xiàn)類里我們已經(jīng)將行為委托到父類,父類則委托給對應(yīng)的行為接口,這就是:針對接口編程而不是實現(xiàn)。

     測試代碼與測試信息如下:

     /**

     *
     * 
    @author BruceLeey
     
    */
    public class TestBird extends TestCase{
        
    public void testMaq() {
            Bird bird
    =new Maq();
            bird.setIFly(
    new MaqFly());
            bird.setIYell(
    new MaqYell());
            bird.display();
            bird.fly();
            bird.yell();
        }
         
    public void testYing() {
            Bird bird
    =new Ying();
            bird.setIFly(
    new YingFly());
            bird.setIYell(
    new YingYell());
            bird.display();
            bird.fly();
            bird.yell();
        }
          
    public void testTuon() {
            Bird bird
    =new Tuon();
            bird.setIFly(
    new NowayFly());
            bird.setIYell(
    new TuonYell());
            bird.display();
            bird.fly();
            bird.yell();
        }
    }

    輸出如下:

    我是麻雀!!!

    麻雀飛起來小巧,速度慢!

    麻雀叫起來吱吱的聲音~~~

    我是老鷹!!!

    老鷹的飛行速度很快,獵物幾乎無處可逃!

    老鷹叫喚起來是:嘯~~~~

    我是鴕鳥!!!

    很抱歉,它不會飛!

    鴕鳥叫喚起來我也不知道~~~--#

     

    參考資料:《Head First Designer pattern》

    posted on 2009-09-26 14:47 Worker 閱讀(221) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式

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


    網(wǎng)站導(dǎo)航:
     

    主站蜘蛛池模板: 亚洲女人被黑人巨大进入| 搡女人免费视频大全| 亚洲精品视频在线观看你懂的| 亚洲综合av一区二区三区不卡| 免费大片黄在线观看yw| 亚洲无限乱码一二三四区| 亚洲视频免费播放| 亚洲人妖女同在线播放| 999国内精品永久免费视频| 亚洲13又紧又嫩又水多| 西西大胆无码视频免费| 亚洲精品国产首次亮相 | 91人人区免费区人人| 亚洲网站在线观看| 免费无码一区二区三区| 亚洲二区在线视频| 成年女人永久免费观看片| 免费一级做a爰片久久毛片潮| 亚洲精品视频免费观看| 中文字幕乱码一区二区免费| 777亚洲精品乱码久久久久久 | 国产精品另类激情久久久免费| 国产亚洲漂亮白嫩美女在线| 亚洲人AV永久一区二区三区久久| 国产三级在线免费观看| 亚洲va在线va天堂va不卡下载| 亚洲精品免费在线| 亚洲国产成人精品无码区二本| 亚洲一区二区三区乱码A| 久久午夜无码免费| 四虎必出精品亚洲高清| 亚洲美女在线国产| 热re99久久6国产精品免费| 亚洲黄色激情视频| 亚洲人AV永久一区二区三区久久| 性xxxx视频免费播放直播| 亚洲精品国产高清在线观看| 国产亚洲一区二区三区在线观看| 国拍在线精品视频免费观看| 一区二区三区免费在线视频 | 亚洲中文字幕久久无码|