复习《大话设计模式》中的《工厂模式》
工厂模式即实例化对象,即c++中new一个对象,其中运用面向对象继承,多态;降低了模块与模块的耦合度。
书中的例子:
UML(unified modeling language)
示例代码:
#ifndef OPERATOR_H #define OPERATOR_H #include <cstring> #include <QDebug> /*抽象基类*/ class Operator { public: Operator(double n1 = 0, double n2 = 0); virtual double getResult() = 0; protected: double num1; double num2; }; Operator::Operator(double n1, double n2) { num1 = n1; num2 = n2; }; /*子类*/ class Add:public Operator /*继承*/ { public: Add(double n1, double n2):Operator(n1, n2){}; double getResult(); }; double Add::getResult() { double temp = num1 + num2; return temp; }; class Sub:public Operator { public: Sub(double n1, double n2):Operator(n1, n2){}; double getResult(); }; double Sub::getResult() { double temp = num1 - num2; return temp; }; class Multiple:public Operator { public: Multiple(double n1, double n2):Operator(n1, n2){}; double getResult(); }; double Multiple::getResult() { double temp = num1 * num2; return temp; }; class Divide:public Operator { public: Divide(double n1, double n2):Operator(n1, n2){}; double getResult(); }; double Divide::getResult() { double temp = 0; if(num2 == 0) { throw num2; goto End; } temp = num1 / num2; End: return temp; }; /*工厂类*/ class Factory { public: Operator * createOperator(int operate, double n1 = 0, double n2 = 0); ~Factory(); protected: Operator *oper; }; Factory::~Factory() { if(oper != NULL) delete oper; oper = NULL; } /*实例化,返回基类指针*/ Operator * Factory::createOperator(int operate, double n1, double n2) { oper = NULL; switch(operate) { case '+': oper = new Add(n1, n2); /*多态oper指向Add类*/ break; case '-': oper = new Sub(n1, n2); break; case '*': oper = new Multiple(n1, n2); break; case '/': oper = new Divide(n1, n2); break; default: oper = NULL; } return oper; } #endif