posts - 262,  comments - 221,  trackbacks - 0
          前言:該系列文章是在學習了Jdon論壇的《GoF 23種設計模式》和《Java設計模式》基礎上,個人總結而成,感謝他們的無私奉獻

          工廠模式的實現可以歸納為以下四種:

          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;
                  }
          }

          4. 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~3適合于工廠所產生的對象都是屬于同一個父類型的,而方式4則適合于工廠需要產生多種類型的產品,而每一種類型的產品下面又有多個子類型的情況。

          而從方式1~3來看,方式1無疑是最簡單的,也是最容易理解和接受的,而方式2和方式3則相對來說要高級一點。高級在哪里呢?我們可以看到,方式1中對對象的創建是使用Hardcode的形式,也即是程序員需要事先知道系統里面存在多少個類型的對象及其對應的編號,一旦增加或刪除、修改了對象的類型,則必然引起if-else塊的改變,造成了維護的困難。

          而方式2則采用了動態類加載的方式,方式3在方式2的基礎上使用了JNDI,更進了一步,其好處是不用出現HardCode的方式,即便你后面的應用增加、刪除了對象的類型,我的程序還是保持現在的樣子,跟進一步來說:可以去掉那些討厭的if-else語句。

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



          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-01-02 22:54 Paul Lin 閱讀(455) 評論(0)  編輯  收藏 所屬分類: 模式與重構
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 四会市| 高碑店市| 桃江县| 九龙坡区| 壤塘县| 铁力市| 普洱| 兰考县| 黔西| 茌平县| 秦安县| 太保市| 柏乡县| 武义县| 宁城县| 兰溪市| 呼伦贝尔市| 宁强县| 洛浦县| 敦煌市| 天全县| 浏阳市| 平阴县| 杭州市| 台北市| 东乌| 洪湖市| 双江| 诏安县| 河津市| 老河口市| 襄汾县| 饶平县| 本溪市| 沾益县| 崇明县| 安阳市| 中方县| 乌恰县| 大城县| 桦甸市|