范型抽象工廠模式

2022-10-09 03:42:12 字數 2714 閱讀 6240

本節介紹范型程式設計中的抽象工廠模式。

一、abstractfactory的定義

template

class abstractfactory : public genscatterhierarchy

};

其中的type2type定義如下

template struct type2type;
其中的abstractfactoryunit定義如下

template class abstractfactoryunit

};

其中genscatterhierarchy的定義如下

template class unit> class genscatterhierarchy;

// genscatterhierarchy specialization: typelist to unit

template class unit>

class genscatterhierarchy, unit> : public genscatterhierarchy, public genscatterhierarchy;

// pass an atomic type (non-typelist) to unit

template class unit>

class genscatterhierarchy : public unit;

// do nothing for nulltype

template class unit>

class genscatterhierarchy;

其中typelist定義如下

template struct typelist;

#define typelist_1(t1) typelist#define typelist_2(t1, t2) typelist#define typelist_3(t1, t2, t3) typelist#define typelist_4(t1, t2, t3, t4) \   

typelist.

..#define typelist_50(...) ...

二、abstractfactory的實現

使用concretefactory去具體實現乙個抽象工廠

concretefactory的定義如下

template

class concretefactory   : public genlinearhierarchy;

其中opnewfactoryunit的定義如下

template class opnewfactoryunit : public base

};

其中genlinearhierarchy的定義如下

template

class genlinearhierarchy;

template

class genlinearhierarchy, unit, root>   : public unit< t1, genlinearhierarchy>;

template

class genlinearhierarchy: public unit;

tl::reverse::result對tlist進行了翻轉,顛倒了tlist中各type的順序

三、實際使用

實際使用時,**如下

typedef concretefactory<

abstractenemyfactory,  // the abstract factory to implement

opnewfactoryunit,  //policy for creating objects,for example using new

typelist_3(sillysoldier, sillymonster, sillysupermonster) //concrete classes factory creates

>easylevelenemyfactory;

typedef abstractfactoryabstractenemyfactory;

abstractenemyfactory* p = new easylevelenemyfactory;

monster* pogre=p->create();

其中abstractfactory經由typelist_3(soldier, monster, supermonster)生成的繼承體系如下

參考資料

<> andrei alexandrescu

建立型 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。工廠模式 乙個工廠類用來建立多個產品族中的同一種產品。抽象工廠模式 多個工廠類用來建立多個產品族。每個產品族中有多個種類的產品。優點 當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件。缺點 難...

設計模式 建立型 抽象工廠模式

建立性模式有五種 1.工廠模式 簡單工廠模式 經常被用到,不屬於gof23種設計模式 工廠方法模式 抽象工廠模式 2.建造者模式 3.原型模式 4.單例模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客...

設計模式 建立型 抽象工廠模式

有點複雜。一般的工廠模式下,每個實體類都需要乙個對應的工廠,當實體類過多時工廠的數量也會變多。當實體類還有子類時,我們需要的工廠就更多了。抽象工廠模式是將所有工廠的共性抽象出來 public inte ce animalfactory 生產母狗和母貓 public class femaleanima...