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

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

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

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

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

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

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

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

      PS:算法族即行為族 

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

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

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

      /**

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

        
    public void fly();

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

        
    public void yell();
    }

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

     /**

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

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

    }


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

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

    鳥類中也存在不會(huì)飛的鳥,比如鴕鳥

    /**
     * 不會(huì)飛
     * 
    @author BruceLeey
     
    */
    public class NowayFly implements IFly{

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

      鳴叫的實(shí)現(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傾入,在基類中將行為實(shí)現(xiàn),但不具體指定,具體指定留由客戶。麻雀類實(shí)現(xiàn)如下,其他的寫法亦是如此。

      /**

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

    }  

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

     測(cè)試代碼與測(cè)試信息如下:

     /**

     *
     * 
    @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();
        }
    }

    輸出如下:

    我是麻雀!!!

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

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

    我是老鷹!!!

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

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

    我是鴕鳥?。。?/p>

    很抱歉,它不會(huì)飛!

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

     

    參考資料:《Head First Designer pattern》

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

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


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

    主站蜘蛛池模板: 亚洲精品无码专区2| 中文字幕亚洲综合精品一区| 亚洲午夜国产精品| 免费无码VA一区二区三区| 在线观看的免费网站无遮挡| 免费无码不卡视频在线观看| 久久亚洲精品成人av无码网站| 女人隐私秘视频黄www免费| 亚洲乱码日产一区三区| 亚洲区精品久久一区二区三区| 99久在线国内在线播放免费观看| 亚洲最新视频在线观看| 99久久久国产精品免费牛牛| 亚洲一区二区在线视频| 亚洲一级毛片免费看| 亚洲天堂免费在线视频| 精品无码国产污污污免费网站国产 | 中文字幕免费观看全部电影| 亚洲精品二区国产综合野狼| 国产精品网站在线观看免费传媒| 亚洲va在线va天堂va四虎| 久久福利资源网站免费看| 亚洲国产综合精品中文第一| 国色精品va在线观看免费视频| 狠狠久久永久免费观看| 免费人妻精品一区二区三区| 亚洲一级片免费看| 久久99国产乱子伦精品免费| 久久久久亚洲国产| 亚洲精品成人在线| 2019中文字幕免费电影在线播放| 在线a亚洲老鸭窝天堂av高清| 香蕉免费一区二区三区| 亚洲偷偷自拍高清| 亚洲一区二区高清| 最近最新高清免费中文字幕| 亚洲国产精品美女久久久久| 亚洲AV无码一区东京热| 国产啪精品视频网站免费尤物| 亚洲人成网网址在线看| 亚洲精品国产高清不卡在线|