<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

    主站蜘蛛池模板: 一级成人a免费视频| 黄网站色视频免费看无下截| 最近更新免费中文字幕大全| 亚洲日韩中文在线精品第一| www.av在线免费观看| 亚洲色偷偷狠狠综合网| 国产国产人免费人成成免视频| 亚洲男人在线无码视频| 精品一区二区三区高清免费观看| 亚洲欧洲无码AV电影在线观看| 香蕉免费一区二区三区| 亚洲自偷自拍另类图片二区| 亚洲高清免费在线观看| 亚洲综合成人婷婷五月网址| 国产免费卡一卡三卡乱码| 在线观看亚洲免费视频| 伊人婷婷综合缴情亚洲五月| 国产免费无码一区二区 | 国产成人精品久久亚洲高清不卡 | 狼色精品人妻在线视频免费| 亚洲综合无码AV一区二区| 日本在线看片免费| 久久精品国产亚洲αv忘忧草| 日本无卡码免费一区二区三区| 成人a毛片免费视频观看| 国产精品亚洲高清一区二区| 1a级毛片免费观看| 日韩欧美亚洲中文乱码| 日日噜噜噜噜夜夜爽亚洲精品| 日韩内射激情视频在线播放免费 | 国产成在线观看免费视频| 黄色毛片免费在线观看| 久久亚洲精品成人777大小说| 麻豆一区二区免费播放网站| 美女被免费视频网站a| 亚洲激情中文字幕| 特级淫片国产免费高清视频| 爱丫爱丫影院在线观看免费| 国产成人亚洲综合网站不卡| 亚洲综合图色40p| 香蕉视频在线观看免费国产婷婷|