工厂方法模式
Define an interface for creating an object, but let subclasses decide which class to instantiate Factory Method lets a class defer instantiation to subclasses.
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化推迟到其子类
#include <iostream>
using namespace std;
class Widget {
public:
virtual void Manufacture() = 0;
virtual void Destroy() = 0;
};
class Widget_A : public Widget {
public:
void Manufacture() { cout << "我是由工厂制造出的零件A" << endl; }
void Destroy() { cout << "我是即被工厂销毁的零件A" << endl; }
};
class Widget_B : public Widget {
public:
void Manufactory() {cout << "我是由工厂制造出的零件B" << endl; }
void Destroy() { cout << "我是即被工厂销毁的零件B" << endl; }
};
class Factory {
public:
virtual Widget* CreateWidget() = 0;
};
class Widget_AFactory : public Factory {
public:
Widget_A* CreateWidget() { return new Widget_A(); }
};
class Widget_BFactory : public Factory {
public:
Widget_B* CreateWidget() { return new Widget_B(); }
};
int main()
{
Widget_AFactory* pWidget_AFactory = new Widget_AFactory();
Widget_A* pWidget_A = pWidget_AFactory->CreateWidget();
pWidget_A->Manufacture();
pWidget_A->Destroy();
delete pWidget_A;
delete pWidget_AFactory;
return 0;
}
工厂方法模式的扩展:
1缩小为简单工厂模式
2升级为多个工厂类
3替代单例模式
4延迟初始化