失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 设计模式---4(抽象工厂模式的概念 产品组和产品等级的概念 抽象工厂模式的实现)

设计模式---4(抽象工厂模式的概念 产品组和产品等级的概念 抽象工厂模式的实现)

时间:2019-05-22 15:52:13

相关推荐

设计模式---4(抽象工厂模式的概念 产品组和产品等级的概念 抽象工厂模式的实现)

抽象工厂模式

抽象工厂模式的概念

抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向 客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品 族的产品对象

抽象工厂的角色及其职责

抽象工厂(Creator)角色 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。具体工厂( Concrete Creator)角色 具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。抽象(Product)角色 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(ConcreteProduct)角色 抽象模式所创建的具体实例对象

产品组和产品等级结构

工厂模式:要么生产香蕉,要么生产苹果、要么生产西红柿;但是不能同时生产一 个产品组。抽象工厂:能同时生产一个产品族

而抽象工厂模式就可以生产一个产品族

产品等级结构:

生产香蕉。苹果。梨子。但是每种水果都有不同的等级,有的好吃,有的难吃。

产品族

南方香蕉/苹果/梨子(这是一个产品组)

北方香蕉/苹果/梨子 (这是另外一个产品族)

抽象工厂模式的实现

#include<iostream>using namespace std;//抽象苹果class AbstractApple{public:virtual void ShowName() = 0;};//中国苹果class ChinaApple :public AbstractApple{public:virtual void ShowName(){cout << "中国苹果" << endl;}};class USAApple :public AbstractApple{public:virtual void ShowName(){cout << "美国苹果" << endl;}};class JapanApple :public AbstractApple{public:virtual void ShowName(){cout << "日本苹果" << endl;}};//抽象香蕉class AbsrtactBanana{public:virtual void ShowName() = 0;};//中国香蕉class ChinaBanana :public AbsrtactBanana{public:virtual void ShowName(){cout << "中国香蕉" << endl;}};class USABanana :public AbsrtactBanana{public:virtual void ShowName(){cout << "美国香蕉" << endl;}};class JapanBanana :public AbsrtactBanana{public:virtual void ShowName(){cout << "日本香蕉" << endl;}};//抽象的梨子class AbsrtactPear{public:virtual void ShowName() = 0;};//中国梨子class ChinaPear :public AbsrtactPear{public:virtual void ShowName(){cout << "中国梨子" << endl;}};//美国梨子class USAPear :public AbsrtactPear{public:virtual void ShowName(){cout << "美国梨子" << endl;}};//日本梨子class JapanPear :public AbsrtactPear{public:virtual void ShowName(){cout << "日本梨子" << endl;}};//抽象工厂 针对产品族class AbstractFactoty{public:virtual AbstractApple *CreateApple() = 0;virtual AbsrtactBanana *CreateBanana() = 0;virtual AbsrtactPear* CreatePear() = 0;};//中国工厂class ChinaFactory :public AbstractFactoty{public:virtual AbstractApple *CreateApple(){return new ChinaApple;}virtual AbsrtactBanana *CreateBanana(){return new ChinaBanana;}virtual AbsrtactPear* CreatePear() {return new ChinaPear;}};//美国工厂class USAFactory :public AbstractFactoty{public:virtual AbstractApple *CreateApple(){return new USAApple;}virtual AbsrtactBanana *CreateBanana(){return new USABanana;}virtual AbsrtactPear* CreatePear() {return new USAPear;}};//日本工厂class JapanFactory :public AbstractFactoty{public:virtual AbstractApple *CreateApple(){return new JapanApple;}virtual AbsrtactBanana *CreateBanana(){return new JapanBanana;}virtual AbsrtactPear* CreatePear() {return new JapanPear;}};void test01(){AbstractFactoty *factory = NULL;AbstractApple *apple = NULL;AbsrtactBanana *banana = NULL;AbsrtactPear *pear = NULL;//中国工厂factory = new ChinaFactory; apple = factory->CreateApple();banana = factory->CreateBanana();pear = factory->CreatePear();apple->ShowName();banana->ShowName();pear->ShowName();delete apple;delete banana;delete pear;}int main(void){test01();system("pause");return 0;}

如果觉得《设计模式---4(抽象工厂模式的概念 产品组和产品等级的概念 抽象工厂模式的实现)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。