原理
工厂创建产品时, 通过传入相应的参数创建相应的产品
工厂
class SimpleFactory { public: Products* Create(string str) { if(str == "A") return new Pro_A; else if(str == "B") return new Pro_B; else return NULL; } };
产品
class Products { public: virtual void Do() =0; }; class Pro_A : public Products { public: virtual void Do() { cout<<"A is doing..."<<endl; } }; class Pro_B : public Products { public: virtual void Do() { cout<<"B is doing..."<<endl; } };
Client
SimpleFactory sfac; Products* pro; pro = sfac.Create("A"); pro->Do(); pro = sfac.Create("B"); pro->Do();
优点
工厂类中包含了必要的逻辑判断, 根据客户端的选择动态实例化相关的类,比如这里客户端选择实例化产品”A”, “B”, 就获得了相应的具体产品.
缺点
当添加产品时, 要修改客户端的同时, 还要修改工厂里的Create方法;
完成上面同样的功能, 工厂方法就不需要修改Create, 只需要通过对Factory的继承来添加相应的产品;
工厂方法提供Factory接口, 让子类去实现具体产品的创建;