工厂模式
- 工厂模式
- 介绍
- 示例
- 示例使用
- 运行结果
- 工厂模式与简单工厂模式区别
工厂模式
工厂模式在简单工厂模式的基础之上进行了改进。当需要生产的产品种类增加,可以通过新增子类工厂来生产,没有破坏程序设计原则中的开放封闭原则。
介绍
工厂模式先抽象出一个抽象工厂,再子类化抽象工厂,将对应产品对象的创建放在子类工厂中。也就是一个子工厂负责生产一种产品,即具体的产品对象由对应的具体的子工厂创建。当产品种类增加,只需增加新的子工厂来生产,遵守开放封闭原则。
示例
本示例接上篇的简单工厂模式。在原本示例的基础上进行改进。将采用简单工厂设计模式的示例改为采用工厂设计模式的示例。
class PenHolder
{
public:
virtual void introduce() = 0;
};
class PlasticPenHolder :public PenHolder
{
public:
void introduce()override
{
cout << "I am PlasticPenHolder!" << endl;
}
};
class IronPenHolder :public PenHolder
{
public:
void introduce()override
{
cout << "I am IronPenHolder!" << endl;
}
};
class BaseFactory
{
public:
virtual PenHolder * createPenHolder() = 0;
};
class PlasticFactory :public BaseFactory
{
public:
PenHolder* createPenHolder()override
{
return new PlasticPenHolder;
}
};
class IronFctory :public BaseFactory
{
public:
PenHolder* createPenHolder() override
{
return new IronPenHolder;
}
};
示例使用
int main()
{
cout << "工厂模式输出:" << endl;
BaseFactory *baseFactory1 = new PlasticFactory;
PenHolder* penHolder1 = baseFactory1->createPenHolder();
penHolder1->introduce();
delete penHolder1;
delete baseFactory1;
BaseFactory *baseFactory2 = new IronFctory;
PenHolder* penHolder2 = baseFactory2->createPenHolder();
penHolder2->introduce();
delete penHolder2;
delete baseFactory2;
return 0;
}
运行结果
工厂模式与简单工厂模式区别
相同点:
简单工厂模式和抽象工厂模式都是创建型设计模式。
不同点:
1.简单工厂模式只有一个工厂类,通过该工厂类生产不同的产品,代码结构简单易懂。工厂模式先是抽象出一个抽象工厂类,在抽象工厂类中提炼出一个纯虚的工厂函数,派生出不同的子工厂类,重写抽象类中的工厂函数,生产不同的产品对象,一种产品对应一个子工厂类,相对于简单工厂代码复杂性增加。
2.简单工厂模式当产品的种类增加时,需要修改工厂函数,破环了开放封闭原则。工厂模式当产品种类增加,只需增加新的子工厂类来生产新的产品,遵守了程序设计的开放封闭原则,具有很好的扩展性和易维护性。但也有一个弊端:当产品种类很多的时候,从抽象工厂类派生的子工厂类就会很多,造成了程序的继承过大。
3.建档工厂模式适用于需求相对简单的产品创建。工厂模式适用于复杂产品的创建需求。