工厂方法(Factory Method)
意图:定义一个用于创建对象的接口,让子类决定实例化哪个类。解决简单工厂模式不支持开闭原则的缺点。
实现:如UML图所示,客户类针对抽象产品类和抽象工厂类编程。当需要添加一个产品的时候,只需要增加一个产品类和对应的工厂类。符合开闭原则
uml:
ps 发现了一个Linux下面画UML很好用的软件 astah (community版免费)
#include <iostream>
using namespace std;
class AbsProduct {
public :
virtual void draw() = 0;
};
class ProductA : public AbsProduct {
public :
virtual void draw() {
cout << "Product A" << endl;
}
};
class ProductB : public AbsProduct {
public :
virtual void draw() {
cout << "Product B" << endl;
}
};
class AbsFactory {
public :
virtual AbsProduct * createProduct() = 0;
};
class FactoryA : public AbsFactory {
public :
virtual AbsProduct * createProduct() {
AbsProduct * product = new ProductA();
return product;
}
};
class FactoryB : public AbsFactory {
public :
virtual AbsProduct * createProduct() {
AbsProduct * product = new ProductB();
return product;
}
};
int main() {
AbsFactory * factory = new FactoryA();
AbsProduct * product = factory->createProduct();
product->draw();
delete factory;
factory = new FactoryB();
delete product;
product = factory->createProduct();
product->draw();
delete factory;
factory = NULL;
delete product;
product = NULL;
return 0;
}
运行结果: