概念
简单工厂模式:根据不同的条件,使用一个工厂类来创建不同类的对象的一种设计模式,用来解决创建对象的问题。
应用场景
有几个不同的类,且这几个类有共同的父类;在不同的条件下用这几个类创造不同的对象;
一般步骤
写一个抽象类作为不同条件的几个类的父类,例如写一个“操作符类”作为“加法类”和“减法类”的父类;
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
;
}
}
具体实例
#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;
}
参考资料
程杰老师的《大话设计模式》