概念
工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。工厂中封装了一个对象的接口,对象的实例化在其子类中进行,工厂从用户获取产品,产品的创建在子类中完成,其子类实现工厂接口,返回的也是一个抽象的产品,工厂将该产品给用户,用户可以不知道产品创建的具体过程,直接在工厂取得自己说要的商品,即可获得。
优缺点
优点
1.用户可以不知道生产的具体操作,直接调用工厂就可获得所需要的产品。
2.如果要增加一种产品的话,直接增加一个子类的判断与实现,扩展性高
3,调用者只需知道调用的接口就行
缺点
1.如果子类太多了的话,每一个子类都要其实现与判断,造成复杂性增加.
2.违背了开放-封闭原则
列子
题目
假如有一个生产水果的工厂,生产苹果,桃子和杨桃,顾客告诉工厂需要苹果这一商品,工厂调用产品的生产,给顾客苹果这一商品。
分析
在工厂中我们创建一个接口和接口的实现类,定义了一个水果工厂,工厂从顾客中获取信息,子类中创建苹果这一商品,子类实现商品的接口,将所产生的商品给工厂,工厂给客户。
代码
#include < iostream>
#include< string>
using namespace std;
class fruit_product {//定义一个接口
public:
virtual void show_fruit()=0;
}
//定义接口的实现类
class apple :public fruit_product { //生产苹果
public:
void show_fruit() {
cout << "put a furit is apple" << endl;
}
};
class peach :public fruit_product { //生产桃子
public:
void show_fruit() {
cout << "put a furit is peach" << endl;
}
};
class carambola :public fruit_product { //生产杨桃
public:
void show_fruit() {
cout << "put a furit is carambola" << endl;
}
};
class fruit_factory { //创建工厂
public:
fruit_product *get_furit(string type) { //获取信息 判断生产的产品,返回信息
if (type == "apple") {
return new apple();
}
if (type == " peach") {
return new peach();
}
if (type == "carambola ") {
return new carambola();
}
}
};
int main() {
fruit_factory *p = new fruit_factory(); //创建一个工厂
fruit_product *f=p->get_furit("apple");
f->show_fruit();
}