<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人片久久| 亚洲精品蜜桃久久久久久| 曰皮全部过程视频免费国产30分钟| 久久成人免费电影| 三级黄色在线免费观看| 高潮毛片无遮挡高清免费视频| 亚洲看片无码在线视频| 91亚洲一区二区在线观看不卡| 久久久久亚洲?V成人无码| 国产91在线免费| 日韩成人免费在线| 成人免费网站在线观看| 100000免费啪啪18免进| **一级毛片免费完整视| 亚洲精品免费视频| 一区二区在线免费观看| 永久免费AV无码网站国产 | 2021精品国产品免费观看| 中文字幕免费不卡二区| a毛片免费全部播放完整成| 人妻免费久久久久久久了| 另类专区另类专区亚洲| 国产亚洲漂亮白嫩美女在线 | 在线观看无码的免费网站| 日日麻批免费40分钟日本的| 67194国产精品免费观看| 精品一区二区三区免费毛片爱 | 亚洲一区二区在线免费观看| 亚洲AV一宅男色影视| 亚洲av丰满熟妇在线播放| 亚洲Av无码专区国产乱码DVD | 国产一区二区三区亚洲综合| 在线播放亚洲精品| 成人嫩草影院免费观看| 一级免费黄色大片| 女人体1963午夜免费视频| 99热这里只有精品6免费| 黄色成人免费网站| 国产精品成人免费一区二区 |