工廠方法模式

2021-06-07 00:50:13 字數 1523 閱讀 1597

工廠方法模式是對簡單工廠模式的改進。首先看看簡單工廠模式的缺點。

軟體是之所以區別於程式,是因為它可以被人們使用,並能間接創造效益。需求是軟體開發的核心,忽視使用者的需求,軟體本身就沒有存在的價值。

假如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 ...