概念
简单工厂模式:根据不同的条件,使用一个工厂类来创建不同类的对象的一种设计模式,用来解决创建对象的问题。
应用场景
- 有几个不同的类,且这几个类有共同的父类;
- 在不同的条件下用这几个类创造不同的对象;
一般步骤
写一个抽象类作为不同条件的几个类的父类,例如写一个“操作符类”作为“加法类”和“减法类”的父类;
// 伪代码 class Operator { ... virtual double GetResult() = 0; }
写具体的子类,并且继承前面的抽象类
// 伪代码 class OperatorAdd : public Operator { double GetResult(){ ... } } class OperatorSub : public Operator { double GetResult(){ ... } } ```
写一个工厂类,根据不同的条件创建对象
// 伪代码 class SimpleFactory { ... Operator *creatOperation(char cOpe) { Operator *ope = NULL; switch(cOpe) { case '+': ope = new OperatorAdd(); break; case '-': ope = new OperatorSub(); break; } return ope; } }
具体实例
// SimpleFactory.cpp #include <cstdio> class Operator // 抽象类-计算器类 { public: virtual void GetResult()=0; void SetNumA(double numA) { a = numA; } void SetNumB(double numB) { b = numB; } protected: double a,b; }; class OperatorAdd : public Operator //加法器类,继承计算器类 { public: void GetResult() { printf("a+b=%lf\n",a+b); } }; class OperatorSub : public Operator // 减法器类,继承计算器类 { public: void GetResult() { printf("a-b=%lf\n",a-b); } }; class SimpleFactory// 工厂类,根据不同符号,创建不同的计算器对象 { public: static Operator * creatOperator(char cOpe) { Operator *ope = NULL; switch (cOpe) { case '+': ope = new OperatorAdd(); break; case '-': ope = new OperatorSub(); break; default: printf("error ope = %c\n",cOpe); break; } } }; int main() { Operator *ope = NULL; ope = SimpleFactory::creatOperator('+');// 创建加法器对象 ope->SetNumA(1.1); ope->SetNumB(2.2); ope->GetResult(); delete ope; ope = SimpleFactory::creatOperator('-');// 创建减法器对象 ope->SetNumA(3.3); ope->SetNumB(2.2); ope->GetResult(); delete ope; return 0; }
参考资料
程杰老师的《大话设计模式》