简单工厂是一种创建型设计模式,在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。
目的
在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。
结构
简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。
实现
根据下面代码可以看出,简单工厂的实现要点
- 用户并不需要指导具体的子类的名称,只需要根据参数来向工厂获取 产品。而用户只用使用 基类指针来指向 工厂创建的子类对象,即多态机制,来完成子类的特定功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| class Phone{ public: Phone() {}; virtual void run() = 0; };
class XiaoMi: public Phone{ public: XiaoMi(){}; virtual void run() override{ cout << "This is xiao mi phone" << endl; } }; class Apple: public Phone{ public: Apple(){}; virtual void run() override{ cout << "This is apple phone" << endl; } };
class SimpleFactory{ public: SimpleFactory(){}; Phone* create(int type){ switch (type) { case 0: return new XiaoMi(); break; case 1: return new Apple(); break; default: return nullptr; } } };
int main() { SimpleFactory factory = SimpleFactory(); Phone* ptr = factory.create(0); ptr->run(); delete ptr; ptr = factory.create(1); ptr->run(); delete ptr; return 0; }
|