简单工厂模式
概念:简单工厂模式是由一个工厂类通过传入参数来决定产生何种产品类的模式。工厂类通过一个可以被外部调用的公共方法来获得参数,从而决定产生何种产品。消费者在这个过程中并不需要知道工厂是如何产生产品的。
以一个二元计算器实例来说明简单工厂模式的实现原理:
有如下类:
1:binaryOperation:它是个抽象类,主要含有两个运算数据,和运算方式,其中运算方式设为纯虚函数,在后面的加法类,减法类中具体实现。
2:binaryOperationAdd:它是binaryOperation的派生类,实现了其中的运算方式(这里为加法),同样可以定义相应的减法类,乘法类等。
3:factory:它作为此模式中的工厂。内部含有一个op成员(其值可以为+,-,*,/等);一个可以被外部访问的setOp()方法;一个返回值为binaryOperation指针类型的方法,此方法通过op值来决定产生何种运算类的实例,如op为+,则产生binaryOperationAdd的对象。
用如下代码来描述他们之间的关系:
class binaryOperation //这是一个抽象类,将由后面的binaryOperationAdd和//binaryOperationSub继承并实现其getResult方法
{
private:
double num1, num2;
public:
void setNum1(double num1) {this->num1 = num1;}
void setNum2(double num2) {this->num2 = num2;}
double getNum1(){return num1;}
double getNum2(){return num2;}
virtual double getResult() = 0;
};
class binaryOperationAdd : public binaryOperation
{
public : double getResult(){return getNum1() + getNum2();}
};
class binaryOperationSub : public binaryOperation
{
public : double getResult(){return getNum1() - getNum2();}
};
class factory
{
private :
char op;
binaryOperation *operationObject;
public :
void setOp(char op){this->op = op;}
binaryOperation *getOperationObject()//外部调用工厂的这个方法来获
//取运算对象。
{
if(op == '+') operationObject = new binaryOperationAdd(); //这
//是工厂模型的关键,通过外部传送的参数op来决定产生加法对象还
//是减法对象
if(op == '-') operationObject = new binaryOperationSub();
return operationObject;
}
};
实用范围:以百度搜索为例,我们将需要的内容关键字输入百度搜索框,百度在获取此关键字后通过后台一系列的算法将含有或接近关键字的内容返回给我们。其中百度就相当于一个工厂,关键字输入框相当于工厂供外部访问的方法,产生的搜索结果相当于工厂的产品,而人们在输入关键字后也不需要知道百度是如何返回结果的。