工廠方法模式是對簡單工廠模式的改進。首先看看簡單工廠模式的缺點。
軟體是之所以區別於程式,是因為它可以被人們使用,並能間接創造效益。需求是軟體開發的核心,忽視使用者的需求,軟體本身就沒有存在的價值。
假如nokia又新開發了一款新手機n99,對於採用簡單工廠模式設計的系統,我們的做法是:
1.新增乙個cn99類繼承自cnokia抽象類,這個符合ocp原則。
注:ocp:open-closed principle開閉原則。ocp關注的是靈活性,改動是通過增加**進行的,而不是改動現有的**。對擴充套件開放,對修改關閉。
2.修改靜態工廠方法中的判斷邏輯,增加對n99的建立**。這個明顯違背ocp。
改進簡單工廠模式,我們要做的就是克服2中的缺點。
下面的工廠方法模式,新增乙個n96的工廠類,不用修改已有的**,完全支援ocp原則,而且工廠方法模式也完全遵守黎克特制替換原則,lsp原則是ocp成為可能的重要原則。
注:liskov substitution principle(黎克特制代換原則):子型別(subtype)必須能夠替換它們的基型別。
雖然工廠方法模式是對簡單工廠模式缺點的該進,這個缺點就是違背軟體設計原則ocp。但是並不是工廠方法模式就優於簡單工廠模式,只不過後者更符合常規的軟體設計理念。
[cpp]view plain
copy
/* 抽象工廠類 */
#pragma once
#include "nokia.h"
class
cfactorymethod
; #include "factorymethod.h"
cfactorymethod::cfactorymethod(void
)
cfactorymethod::~cfactorymethod(void
)
/* 生產n99的具體工廠類 */
#pragma once
#include "factorymethod.h"
#include "n96.h"
class
cn96factory :
public
cfactorymethod
; #include "n96factory.h"
cn96factory::cn96factory(void
)
cn96factory::~cn96factory(void
)
cnokia * cn96factory::createnokiamobile(void
)
/* 客戶端通過建立n99工廠生產nokia手機 */
#include "stdafx.h"
#include "n96factory.h"
int_tmain(
intargc, _tchar* argv)
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...