posts - 262,  comments - 221,  trackbacks - 0
          前言:該系列文章是在學(xué)習(xí)了Jdon論壇的《GoF 23種設(shè)計(jì)模式》和《Java設(shè)計(jì)模式》基礎(chǔ)上,個(gè)人總結(jié)而成,感謝他們的無私奉獻(xiàn)

          工廠模式的實(shí)現(xiàn)可以歸納為以下四種:

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

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

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

          方式4是最為復(fù)雜而且也是最為強(qiáng)大的一種,它在實(shí)現(xiàn)了對(duì)象工廠抽象的基礎(chǔ)上,又集成了工廠方法。使到不同的工廠可以生產(chǎn)相同類型的產(chǎn)品,但產(chǎn)品的子類可能有所不同。就像上面的工廠1和工廠2都可以生產(chǎn)汽車和飛機(jī)一樣,他們各自之間可以生產(chǎn)不同系列的產(chǎn)品(抽象工廠),而且每個(gè)系列下面可能有不同的型號(hào)(工廠方法)。



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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 潮州市| 洱源县| 梅河口市| 安泽县| 罗定市| 特克斯县| 凤庆县| 河西区| 固原市| 定陶县| 呼伦贝尔市| 怀来县| 衡东县| 临沧市| 同仁县| 元氏县| 阳曲县| 高邑县| 灵武市| 个旧市| 来宾市| 海阳市| 鲜城| 静宁县| 连州市| 绍兴市| 中阳县| 宣化县| 长沙市| 兰西县| 盐源县| 乳山市| 日喀则市| 射洪县| 抚宁县| 五常市| 泰兴市| 钦州市| 台州市| 屯昌县| 施秉县|