1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 设计模式---3(工厂方法模式的概念 工厂方法模式的实现 工厂方法模式和简单工厂模式

设计模式---3(工厂方法模式的概念 工厂方法模式的实现 工厂方法模式和简单工厂模式

时间:2022-02-10 19:06:28

相关推荐

设计模式---3(工厂方法模式的概念 工厂方法模式的实现 工厂方法模式和简单工厂模式

工厂方法模式

概念

工厂方法模式同样属于类的创建型模式又被称为多态工厂模式

工厂方法模式的意义

定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类 必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

工厂方法模式的角色和职责

抽象工厂(Creator)角色

工厂方法模式的核心,任何工厂类都必须实现这个接口。

具体工厂( Concrete Creator)角色

具体工厂类是抽象工厂的一个实现,负责实例化产品对象。

抽象(Product)角色

工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(ConcreteProduct)角色

工厂方法模式所创建的具体实例对象

工厂方法模式的实现

#include<iostream>using namespace std;//抽象水果class AbstractFruit{public:virtual void ShowName() = 0;};//苹果class Apple :public AbstractFruit{virtual void ShowName(){cout << "我是苹果" << endl;}};//香蕉class Banana :public AbstractFruit{public:virtual void ShowName(){cout << "我是香蕉" << endl;}};//梨子class Pear :public AbstractFruit{public:virtual void ShowName(){cout << "我是梨子" << endl;}};//把工厂抽象出来class AbstractFruitFactory{public:virtual AbstractFruit* CreateFruit() = 0;};//苹果工厂class AppleFactiry :public AbstractFruitFactory{public:virtual AbstractFruit *CreateFruit(){return new Apple;}};//香蕉工厂class BananaFactory :public AbstractFruitFactory{public:virtual AbstractFruit * CreateFruit(){return new Banana;}};//梨子工厂class PearFactory :public AbstractFruitFactory{public:virtual AbstractFruit * CreateFruit(){return new Pear;}};void test01(){AbstractFruitFactory *factory = NULL;AbstractFruit *fruit = NULL;//创建苹果工厂factory = new AppleFactiry;fruit = factory->CreateFruit();fruit->ShowName();delete fruit;delete factory;//创建一个香蕉工厂factory = new BananaFactory;fruit = factory->CreateFruit();fruit->ShowName();delete fruit;delete factory;//创建一个梨子工厂factory = new PearFactory;fruit = factory->CreateFruit();fruit->ShowName();delete fruit;delete factory;}int main(void){test01();system("pause");return 0;}

工厂方法模式的优点

不需要记住具体类名,有时不需要记住具体参数实现了对象创建和使用的分离系统的可扩展性也的非常好,无需修改接口和原类。

工厂方法模式的缺点

类的个数成本增加,导致类越来越多,增加维护成本判断逻辑在客户端,需要自己判断新加的产品是否需要新建工厂。

工厂方法模式和简单工厂模式比较

工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽 象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口, 或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对 象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭” 原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模 式退化后可以演变成简单工厂模式
简单工厂模式的适用场景
工厂方法模式的适用场景

设计模式---3(工厂方法模式的概念 工厂方法模式的实现 工厂方法模式和简单工厂模式比较)

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