工厂模式
主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
优点 : 适用于不同情况创建不同的类时
不足:客户端必须要知道基类和工厂类,耦合性差
#include<stdio.h>
#include<string.h>
class Oper{
double a;
double b;
public:
void SetA(double _x) {a = _x;}
void SetB(double _y) {b = _y;}
double GetA(){return a;}
double GetB(){return b;}
virtual double GetResult(){return 0;}
};
class Add : public Oper{
public:
double GetResult(){return (GetA()+GetB());}
};
class Sub : public Oper{
public:
double GetResult(){return (GetA()-GetB());}
};
class Fac
{
public:
static Oper * CreateOper(char opers);
};
Oper * Fac::CreateOper(char opers)
{
Oper *oper;
switch(opers)
{
case '+': oper = new Add();break;
case '-': oper = new Sub();break;
}
return oper;
}
int main()
{
double a = 10;
double b = 10;
Oper * p = Fac::CreateOper('+');
p->SetA(a);
p->SetB(b);
printf("--------------%f\r\n",p->GetResult());
return 0;
}