工厂方法模式 :定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式将一个类的实例化延迟到他的子类
工厂方法模式把简单工厂的内部逻辑判断移到了客户端代码来进行
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了于具体产品的依赖
工厂方法模式代码:
#include <iostream>
using namespace std;
class Operator
{
private:
float first;
float second;
public:
void SetFirst(float m)
{
first = m;
}
void SetSecond(float m)
{
second = m;
}
float GetFirst()
{
return first;
}
float GetSecond()
{
return second;
}
virtual float GetSum() = 0;
};
class OperatorAdd : public Operator
{
public:
virtual float GetSum()
{
float m = GetFirst() + GetSecond();
return m;
}
};
class OperatorRed : public Operator
{
public:
virtual float GetSum()
{
float m = GetFirst() - GetSecond();
return m;
}
};
class OperatorRid : public Operator
{
public:
virtual float GetSum()
{
float m = GetFirst() * GetSecond();
return m;
}
};
class OperatorBes : public Operator
{
public:
virtual float GetSum()
{
float m = GetFirst() / GetSecond();
return m;
}
};
class OperatorFactory
{
public:
virtual Operator* CreateOperator() = 0;
};
class FactoryAdd : public OperatorFactory
{
public:
Operator* CreateOperator()
{
return new OperatorAdd();
}
};
class FactoryRed : public OperatorFactory
{
public:
Operator* CreateOperator()
{
return new OperatorRed();
}
};
class FactoryRid : public OperatorFactory
{
public:
Operator* CreateOperator()
{
return new OperatorRid();
}
};
class FactoryBes : public OperatorFactory
{
public:
Operator* CreateOperator()
{
return new OperatorBes();
}
};
int main()
{
OperatorFactory *factory = new FactoryAdd();
Operator *op;
op = factory->CreateOperator();
op->SetFirst(10);
op->SetSecond(5);
cout<<op->GetSum()<<endl;
return 0;
}