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 設計模式》 閻宏 電子工業出版社

          主站蜘蛛池模板: 望城县| 宁明县| 南郑县| 连云港市| 维西| 汾西县| 阳泉市| 晴隆县| 宜春市| 肃北| 永靖县| 澄迈县| 门头沟区| 阿瓦提县| 贺州市| 河西区| 祁门县| 乌海市| 正阳县| 昆明市| 南投市| 肃宁县| 闽清县| 华安县| 昌乐县| 新余市| 徐州市| 阳原县| 垣曲县| 都兰县| 门头沟区| 瓮安县| 黄梅县| 郎溪县| 大安市| 洪雅县| 高邮市| 宣武区| 钟山县| 柞水县| 上高县|