A Cooly Weblog

             ::  ::  ::  ::  :: 管理

          工廠方法模式Factory Method

          Posted on 2007-02-28 00:51 acooly 閱讀(593) 評論(0)  編輯  收藏 所屬分類: Java開發 、設計模式

          1.??? 模式定義... 1

          2.??? 模式介紹... 1

          3.??? 模式特點... 2

          4.??? 與其它模式的關系... 3

          5.??? 參考... 3

          ?

          1. ?? 模式定義

          工廠方法模式 (Factory Method) 是創建模式的一種,也叫虛擬構造子 (Virture Constractor) 模式或多態性工廠 (Polymorphic Factory) 模式。

          ?????? 工廠方法模式定義一個抽象的對象創建類或接口,將實際的對象創建工作交給子類來實現。

          2. ?? 模式介紹

          2.1. 簡單類圖

          ?

          2.2. 類圖對應示例代碼

          2.2.1. 抽象產品: AbstractProduct

          public interface AbstractProduct{

          ? public void printName();

          }

          ?

          2.2.2. 具體產品: ConcreteProduct1 ConcreteProduct2

          public class ConcreteProduct1 implements AbstractProduct{

          ? public void printName(){

          ??? System.out.println(“ConcreteProduct1”);

          }

          }

          public class ConcreteProduct2 implements AbstractProduct{

          ? public void printName(){

          ??? System.out.println(“ConcreteProduct2”);

          }

          }

          ?

          2.2.3. 抽象工廠: AbstractFactory

          public interface AbstractFactory {

          ? public AbstractProduct factoryMethod();

          }

          2.2.4. 具體工廠: ConcreteFactory1 ConcreteFactory2

          public class ConcreteFactory1 implements AbstractFactory{

          ? public AbstractProduct factoryMethod(){

          //do something.

          return new ConcreteProduct1();

          }

          }

          ?

          public class ConcreteFactory2 implements AbstractFactory{

          ? public AbstractProduct factoryMethod(){

          //do something.

          return new ConcreteProduct2();

          }

          }

          ?

          3. ?? 模式特點

          3.1. 開閉原則(優點)

          工廠方法模式解決了簡單工廠模式的一些缺陷,是在簡單工廠模式的基礎上發展的。

          簡單工廠模式把所有的重心放到工廠類上,一旦向系統增加新的產品,就必須修改工廠類,不滿足開閉原則;工廠方法模式提供一個抽象的工廠接口,在不同的產品結構上實現不同的產品工廠具體類來創建該層次中的產品,通常一個具體工廠創建一個具體產品。在新增產品的時候,只需要實現新的對應工廠就可以滿足需要,是符合開閉原則的。

          ?

          3.2. 缺點

          1. 相比簡單工廠模式,工廠方法模式客戶端編程復雜,每個產品的創建都需要實例化對應的工廠類。
          2. 相對的擴展性,當需要修改產品結構中的對各產品的時候,需要修改各個工廠(當然也可以直接新加入很多新的產品和工廠,但這樣不是又增加了很多無用的遺留類嗎,而且現實中很可能要修改客戶端代碼了。),而簡單工廠模式仍然只要修改一個工廠類。
          3. 現實中常常要使用退化模式,失去多態性。實際設計中經常會有子類新增功能,那么在對應工廠生產該類的時候就需要直接返回該具體類,而不是抽象產品,不然就要向下轉型了。

          ?

          ?

          4. ?? 與其它模式的關系

          工廠方法模式與模板模式

          ?

          5. ?? 參考

          java 設計模式》 閻宏 電子工業出版社

          主站蜘蛛池模板: 哈巴河县| 乾安县| 花莲县| 韩城市| 高州市| 蛟河市| 龙里县| 松原市| 毕节市| 开鲁县| 格尔木市| 调兵山市| 东莞市| 临汾市| 桦南县| 金门县| 南康市| 盐城市| 金华市| 营口市| 延川县| 醴陵市| 安福县| 法库县| 旬邑县| 建德市| 宁强县| 南丰县| 乌恰县| 红安县| 正宁县| 庐江县| 潼关县| 行唐县| 烟台市| 论坛| 赤峰市| 南京市| 肥东县| 聊城市| 凤庆县|