天天看點

1.2簡單工廠模式,工廠方法模式

1.簡單工廠模式

     對象的集中管理,是把對象放在工廠類當中,那麼如何避免工廠類重複new操作?

     a.通過構造函數進行注入。

     b.設定工廠類為Singleton模式或者使用static方式。static更像API的集合,因為他不能被繼承,Singleton更像面向對象。

1.2簡單工廠模式,工廠方法模式

      用戶端調用:

      OperationFactory factory=new OperationFactory();

      IOperation oper= factory.CreateOperation("+");  

//或枚舉

  OperEnum.A

      oper.NumA = 1;

      oper.NumB = 2;

      double result = oper.GetResult();    

     簡單工廠的一個優點:對象的new過程進行集中管理,通過接口或抽象,使得用戶端從依賴具體的對象,變成依賴接口和配置,通過不同的配置,生成不同的對象。保證了上層調用的穩定性。

     簡單工廠的一個缺點:用戶端對Factory還是存在着依賴關系,而且如果新增乘法操作,那麼工廠類代碼必須修改(增加case判斷),這違背了開閉原則。

2.工廠方法模式

     概念:使得一個類的執行個體化,延遲到了子類。

     簡單工廠的一個擴充,增加了一個抽象工廠,具體工廠。形成四個角色。把類的執行個體化延遲到子類,即把類的new()工作放在具體工廠實作。

1.2簡單工廠模式,工廠方法模式

      IFactory factory=new AddFactory();

      IOperation operation=factory.CreateOperation();  //多态性:同一個方法名稱,不同的表現形态

      operation.NumA = 1;

      opertaion.NumB = 2;

      double result=operation.GetResult();

    工廠方法模式的一個優點: 此時如果增加乘法操作,隻需要擴充增加MutiOpertaion類和MutiFactory工廠類即可,原來的産品類和工廠類體系保持穩定,這符合開閉原則和依賴倒置原則。

    工廠方法模式的一個缺點: 這裡的優點也是缺點,即工廠方法把原來的簡單工廠的内部邏輯判斷,轉移到了用戶端上面,原來是修改工廠類,現在是修改用戶端,如果用戶端有100個呢?同時增加類的過程,也是增加開發量的過程。

          而且雖然對象的執行個體化延遲到了子類,但是依賴始終存在,隻不過轉嫁到另一個對象身上。為此工程中往往最後吧推不掉的依賴關系轉嫁到配置檔案上。這樣工廠方法模式往往被演繹成:“工廠方法+依賴注入+配置檔案通路”。

   簡單工廠VS工廠方法

   工廠方法客服了簡單工廠的違背開閉原則的缺點,又保持了集中封裝對象的建立過程的優點;同時使用多态性,保持了簡單工廠的優點,克服了他的缺點。

繼續閱讀