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

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

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

    設計模式學習筆記(十)—Factory Method模式

    Posted on 2007-11-29 17:41 flustar 閱讀(1706) 評論(0)  編輯  收藏 所屬分類: Design Patterns

        《設計模式》一書對Factory Method模式是這樣描述的:
         定義一個用于創建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。
         我的理解:FatoryMethod模式是一種創建型模式,定義一個用于創建對象的接口的意思是說,我們要定義一個用于創建對象的接口(或者說抽象類,實際上就是個抽象工廠abstractFactory),它的內部有一個創建對象的方法,這個方法的返回值是一個接口(或者抽象類)的類型,這個方法就是FactoryMethod;讓子類決定實例化哪一個類意思是說我們要定義一個實現了該創建對象的接口(或者抽象類)的子類(具體的工廠類concreteFactory),讓子類決定要創建對象的具體類型的實例(實現FactoryMethod)。下面給出一個例子,代碼如下:
    abstract  class BallFactory{
     protected  abstract Ball makeBall();  //Factory Method
    }
    class BasketballFact extends BallFactory{
     public Ball makeBall(){       //子類實現Factory Method決定實例化哪一個類的
      return new Basketball();
     }
     
    }
    class FootballFact extends BallFactory{
     public Ball makeBall(){      //子類實現Factory Method決定實例化哪一個類的
      return new Football();
     }
    }
    class  Basketball extends Ball{
     public void play(){
      System.out.println("play the basketball");
     }
    }
    class Football extends Ball{
     public  void play(){
      System.out.println("play the football");
     }
    }
    abstract class Ball{
     protected  abstract  void play();
    }

    class test{
     public static void main(String[] args){
      BallFactory ballFactory=new BasketballFact();
      Ball basketball=ballFactory.makeBall();
      basketball.play();
      
      ballFactory=new FootballFact();
      Ball football=ballFactory.makeBall();
      football.play();
     
     }
     
    }

    輸出如下:
    play the basketball
    play the football
    這個模式我在abstract Factory模式中已經使用過了,只是那時候還不知道有Factory Method這個模式,在我舉例中的ResFactory類的getDisplayDrvr()和getPrintDrvr()實際上就是工廠方法。具體參見《設計模式學習筆記(五)—Abstract Factory抽象工廠模式》。
    小結:Factory Method模式是一個非常常用的模式。它主要適用于:
    1) 當一個類不知道它所必須創建的對象的類的時候。
    2) 當一個類希望由它的子類來指定它所創建的對象的時候。
    3) 當類將創建對象的職責委托給多個幫助子類中的某一個,來完成這個創建對象的任務。

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 亚洲最大福利视频| 亚洲精品乱码久久久久久下载| 亚洲精品无码久久| 成人毛片免费观看| 亚洲日产乱码一二三区别| 国产精品视频免费一区二区| 亚洲一区二区三区高清在线观看| 日韩精品成人无码专区免费| 亚洲中文精品久久久久久不卡| 成年在线网站免费观看无广告| 亚洲AV一区二区三区四区| 永久免费看mv网站入口| 羞羞视频免费网站含羞草| 国产精品亚洲w码日韩中文| 国产精品hd免费观看| 国产亚洲综合成人91精品| 全部免费毛片在线播放| 亚洲国产精品人久久电影| 在线免费观看污网站| 一级看片免费视频囗交| 亚洲韩国—中文字幕| 成人免费午夜在线观看| 免费一级全黄少妇性色生活片 | 狼色精品人妻在线视频免费| 国产亚洲精品激情都市| 性xxxx视频免费播放直播| 亚洲不卡视频在线观看| 俄罗斯极品美女毛片免费播放| 一区二区三区在线免费 | 成人免费视频小说| 一区二区三区免费在线视频| 久久亚洲AV午夜福利精品一区 | xxxxwww免费| 精品亚洲成a人在线观看| 亚洲线精品一区二区三区| 最近中文字幕免费mv在线视频| 亚洲成a人片在线不卡一二三区| 亚洲色婷婷一区二区三区| av大片在线无码免费| 一个人看的www免费在线视频| 亚洲伦另类中文字幕|