設計模式 之二十三種設計模式 工廠方法模式

2021-10-05 06:30:55 字數 2238 閱讀 7932

define an inte***ce for creating an object, but let subclasses decide which class to instantiate. factory method lets a class defer instantiation to subclasses.

(定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。)

定義抽象產品類:

class

product

//抽象方法

virtual

void

method2()

=0;}

;

定義具體產品類:

class

concreateproduct1

:public product };

class

concreateproduct2

:public product

};

定義抽象工廠類:

template

<

class

abspro

>

class

creator

;

定義具體工廠類:

template

<

class

abspro

,class

conpro

>

class

concretecreator

:public creator

};

場景呼叫類:

concretecreator pc;

product *p = pc.

createproduct()

;p->

method2()

;

良好的封裝性,**結構清晰。根據產品的類名即可得到產品物件;

擴充套件性非常優秀。需要增加產品類時,只要適當地修改具體的工廠類或擴充套件乙個工廠類就可以實現;

遮蔽產品類。呼叫者不需要關係產品類的實現,產品類的實現由工廠類完成;

典型的解耦框架。

工廠方法模式是new乙個物件的替代品,所以在所有需要生成物件的地方都可以使用,但是需要考慮複雜度;

需要靈活的,可擴充套件的框架時;

可以用在異構專案中;

使用在測試驅動開發的框架下;

1 簡單工廠模式

當乙個模組只需要乙個工廠類,即刪除抽象工廠類,乙個工廠固定的加工生產某一種抽象產品。

不符合開閉原則。

沒有完美的模式,簡單且符合需求即是完美。

2 公升級為多個工廠類

為產品類增加適配其對應的工廠類來完成每個產品具體實現,比較合適產品類的初始化都不相同的情況下。

3 替代單例模式

4 延遲初始化

通過map將已經建立的產品類物件保留快取,然後下一次如果需要獲取物件,先判斷map中是否存在,如果存在則直接取出返回,否則按需產生乙個物件並放入到map容器中,方便下次呼叫。

#include

using

namespace std;

class

human

;class

black

:public human

virtual

void

talk()

};class

yellow

:public human

virtual

void

talk()

};class

white

:public human

virtual

void

talk()

};template

<

class

abshuman

>

class

abstracthumanfactory

;template

<

class

abshuman

,class

conhuman

>

class

humanfactory

:public abstracthumanfactory};

intmain()

二十三種設計模式之工廠模式

工廠模式的核心 例項化物件 原因 有些物件不能直接例項化,比如介面 抽象類及複雜物件的其他依賴 核心 呼叫工廠class的靜態方法例項化物件 以日誌為例 public class staticfactory 核心 先建立工廠物件,之後呼叫工廠方法 例項化工廠模式 public class insta...

二十三種設計模式2 抽象工廠模式

工廠方法模式有乙個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的 問題,如何解決?就用到抽象工廠模式,建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的 因為抽象工廠不太 好理解,我...

二十三種設計模式 羅列

1 工廠方法模式 factory method 2 抽象工廠模式 abstract factory 3 單例模式 singleton 4 建造者模式 builder 5 原型模式 prototype 6 介面卡模式 adapter 7 裝飾模式 decorator 8 模式 proxy 9 外觀模式...