<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)航:
     

    主站蜘蛛池模板: 国产福利免费视频| 国产一区二区三区在线免费观看| 亚洲嫩模在线观看| 成人性生交大片免费看无遮挡| 久久亚洲色WWW成人欧美| 国产AV无码专区亚洲AV手机麻豆| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 成年免费大片黄在线观看岛国| 亚洲av片在线观看| 国产亚洲精品无码成人| 亚洲第一成年免费网站| aa级毛片毛片免费观看久| 亚洲美女视频一区| 亚洲av中文无码| 13一14周岁毛片免费| 美女视频黄.免费网址| 色婷婷六月亚洲婷婷丁香| 国产国产人免费人成免费视频| 国产免费无码一区二区| 亚洲av综合av一区二区三区 | 亚洲日本香蕉视频| 亚洲精品成人久久久| 久久福利资源网站免费看| 一区二区三区免费在线观看| 亚洲性色成人av天堂| 亚洲日韩激情无码一区| 日本免费网站在线观看| 亚洲国产日韩综合久久精品| 亚洲综合图色40p| 免费无码黄网站在线观看| 99热在线精品免费播放6| 一级毛片完整版免费播放一区| 亚洲最大av资源站无码av网址| 久久伊人久久亚洲综合| 亚洲精品国产精品国自产观看| 思思re热免费精品视频66| 无码精品人妻一区二区三区免费看 | 亚洲欭美日韩颜射在线二| 四虎在线播放免费永久视频| 扒开双腿猛进入爽爽免费视频| 最近中文字幕免费完整 |