简单工厂模式
主要用于创建对象。新添加类时,不会影响以前的系统代码。 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时
BUG:客户端必须要知道基类和工厂类,耦合性差
主要用于创建对象。新添加类时,不会影响以前的系统代码。 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时
BUG:客户端必须要知道基类和工厂类,耦合性差
(工厂类与基类为关联关系)
![](https://i-blog.csdnimg.cn/blog_migrate/1f9ece1f602bb510e90edd242ce1e5bf.png)
//操作基类
class COperation
{
public:
int m_nFirst; //创建两个元素
int m_nSecond;
virtual double GetResult()
{
double dResult=0;
return dResult;
}
};
//加法
class AddOperation : public COperation
{
public:
virtual double GetResult()
{
return m_nFirst+m_nSecond;
}
};
//减法
class SubOperation : public COperation
{
public:
virtual double GetResult()
{
return m_nFirst-m_nSecond;
}
};
//工厂类
class CCalculatorFactory
{
public:
static COperation* Create(char cOperator);
};
class CCalculatorFactory
{
public:
static COperation* Create(char cOperator);
};
COperation* CCalculatorFactory::Create(char cOperator)
{
COperation *oper;
switch (cOperator) //传递一个具体的方法类,然后返回这个类的类型
{
case '+':
oper=new AddOperation();
break;
case '-':
oper=new SubOperation();
break;
default:
oper=new AddOperation();
break;
}
return oper;
}
{
COperation *oper;
switch (cOperator) //传递一个具体的方法类,然后返回这个类的类型
{
case '+':
oper=new AddOperation();
break;
case '-':
oper=new SubOperation();
break;
default:
oper=new AddOperation();
break;
}
return oper;
}
主函数
int main()
{
int a,b;
cin>>a>>b;
COperation * op=CCalculatorFactory::Create('-'); //创建一个减法对象处理类 返回suboperation对象
op->m_nFirst=a;
op->m_nSecond=b;
cout<<op->GetResult()<<endl;
return 0;
int main()
{
int a,b;
cin>>a>>b;
COperation * op=CCalculatorFactory::Create('-'); //创建一个减法对象处理类 返回suboperation对象
op->m_nFirst=a;
op->m_nSecond=b;
cout<<op->GetResult()<<endl;
return 0;
}