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

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

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

    工廠模式學習筆記

    1. 簡單工廠模式又稱靜態工廠方法模式。從命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用于創建對象的接口。

    1.public class CarFactory{        
           public static Car getCar(int type){
               if(type == 1){
                      return new Car1();
                 
    } else {
                  return new Car2();
               }
           }
    }

    2. public class CarFactory{
            public static Car getCar(String carClass){
                String className = carClass;
                
    Class c = Class.forName(className);
                
    Car car = (Car)c.newInstance();
                 return car;
            }
    }

    3. public class CarFactory{
            public static Car getCar(String carJNDIName){         
                InitialContext ic = new InitialContext();
                
    String className = ic.lookUp(carJNDIName);
               
    Car car = (Car)Class.forName(className).newInstance();
                return car;
            }
    }
    方式1~3適合于工廠所產生的對象都是屬于同一個父類型的,而從方式1~3來看,方式1無疑是最簡單的,也是最容易理解和接受的,而方式2和方式3則相對來說要高級一點。高級在哪里呢?我們可以看到,方式1中對對象的創建是使用Hardcode的形式,也即是程序員需要事先知道系統里面存在多少個類型的對象及其對應的編號,一旦增加或刪除、修改了對象的類型,則必然引起if-else塊的改變,造成了維護的困難。

    而方式2則采用了動態類加載的方式,方式3在方式2的基礎上使用了JNDI,更進了一步,其好處是不用出現HardCode的方式,即便你后面的應用增加、刪除了對象的類型,我的程序還是保持現在的樣子,跟進一步來說:可以去掉那些討厭的if-else語句。
    2. 工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分擔?!?font style="background-color: #c7edcc">實質上它是讓工廠實現了抽象的工廠接口,它把具體怎么生產一種東西,放在具體的工廠去實現了,所謂”延遲到子類中實現“

    示例一:
    public interface Driver{
           public Car driverCar();
    }
    public class BenzDriver implements Driver{
           public Car driverCar(){
                  return new Benz();
           }
    }
    public class BmwDriver implements Driver{
           public Car driverCar()   {

    return new Bmw();
           }
    }

    // 應該和具體產品形成對應關系 ...
    //
    有請暴發戶先生

     public class Magnate

    {

                  public static void main(String[] args)

                  {

                         try{ 
                                Driver driver = new BenzDriver();

                                Car car = driver.driverCar();

                                car.drive();

                         }

           ……

    }
    示例二:

    public interface Creator
    {
      public Prouct factory();
    }

    public SubCreator1 implent Creator
    {
       public Prouct factory()
      {
       return new ConcreteProduct1();
       }
    }

    public SubCreator2 implent Creator
    {
       public Prouct factory()
      {
        return new ConcreteProduct2();
       }
    }

    請注意:返回類型是Product型的?。?br /> 這樣客戶端調用是直接new 一個具體工廠的實例,然后命令它去生產,而對于具體工廠的父類(既工廠接口,接口完全可以改成子類繼承父類來實現,只是這樣不好,不符合OO的原則),它完全不知道什么產品被生產了,甚至它連那個具體工廠被實例化它都不知道!
    3. 抽象工廠
    public abstract class AbstractFactory{
            public abstract Car getCar(String carClass);
           
    public abstract Plane getPlane(String planeClass);
    }

    public class Factory1 extends AbstractFactory{
          public Car getCar(String carClass){
              // 參考上面的方式1~3
              return car1;
          }

          public Plane getPlane(String planeClass){
              // 參考上面的方式1~3
              return plane1;
          }
    }

    public class Factory2 extends AbstractFactory{
         public Car getCar(String carClass){
              // 參考上面的方式1~3
              return car2;
         }

         public Plane getPlane(String planeClass){
              // 參考上面的方式1~3
              return plane2;
         }
    }

    方式4是最為復雜而且也是最為強大的一種,它在實現了對象工廠抽象的基礎上,又集成了工廠方法。使到不同的工廠可以生產相同類型的產品,但產品的子類可能有所不同。就像上面的工廠1和工廠2都可以生產汽車和飛機一樣,他們各自之間可以生產不同系列的產品(抽象工廠),而且每個系列下面可能有不同的型號(工廠方法)。

    參考資料:http://www.tkk7.com/pengpenglin/archive/2008/01/02/172325.html
    http://www.tkk7.com/killme2008/archive/2007/03/15/104031.html
    http://www.tkk7.com/alex/archive/2006/08/29/66479.html

    posted on 2008-05-04 14:13 扭轉乾坤 閱讀(298) 評論(0)  編輯  收藏 所屬分類: 設計模式


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2008年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類(31)

    隨筆檔案(30)

    文章分類(32)

    文章檔案(33)

    相冊

    PHP小站-首頁

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产传媒在线观看视频免费观看| 91热成人精品国产免费| 一个人免费视频在线观看www | 亚洲AV综合色区无码二区偷拍| 精品久久亚洲中文无码| 国产成人人综合亚洲欧美丁香花| 一区二区免费在线观看| 免费看搞黄视频网站| 免费看男女下面日出水来| 成在线人永久免费视频播放| 亚洲精品无码久久毛片| 亚洲视频在线免费观看| 亚洲AV日韩综合一区尤物| 深夜特黄a级毛片免费播放| 黄色片免费在线观看| 毛片高清视频在线看免费观看| 免费va人成视频网站全| 精品亚洲综合久久中文字幕| 亚洲va精品中文字幕| 一级毛片大全免费播放| 最近2019年免费中文字幕高清 | 最近2019免费中文字幕视频三| 永久黄网站色视频免费观看| 在线观看亚洲av每日更新| 亚洲成人免费网站| www亚洲精品久久久乳| A片在线免费观看| 免费无码不卡视频在线观看 | 免费黄色一级毛片| 国产亚洲综合久久系列| 午夜在线a亚洲v天堂网2019| 特级做A爰片毛片免费看无码| 黄页免费的网站勿入免费直接进入| 亚洲成A人片在线观看中文| 久久精品国产亚洲AV嫖农村妇女| 国产精品亚洲综合网站| 四虎影视成人永久免费观看视频| 午夜老司机免费视频| 亚洲a在线视频视频| 极品美女一级毛片免费| 国产成人免费高清激情明星|