您的位置:首页 > 其它

设计模式之简单工厂模式

2014-07-09 16:46 211 查看
1、简单工厂设计模式:也就是说,到底要实例化谁,将来会不会增加实例化的对象,这是很容易发生变化的地方,应该考虑用一个单独的类来做这个创建实例的过程,这就是工厂。

UML图如下:



2、C++代码实现

[cpp] view
plaincopy



#include <iostream>

using namespace std;



/* 运算类 */

class Operation

{

public:

//左值

double leftValue;

//右值

double rightValue;

//纯虚函数,定义了一个运算结果的接口。

virtual double GetResult() = 0;

};



/* 加法运算类,实现加法接口 */

class Add : public Operation

{

public:

double GetResult();

};



double Add::GetResult()

{

return leftValue + rightValue;

}



/* 减法运算类,实现减法接口 */

class Minus : public Operation

{

public:

double GetResult();

};



double Minus::GetResult()

{

return leftValue - rightValue;

}



/* 乘法运算类,实现乘法接口 */

class Multi : public Operation

{

public:

double GetResult();

};



double Multi::GetResult()

{

return leftValue * rightValue;

}



/* 除法运算类,实现除法接口 */

class Division : public Operation

{

public:

double GetResult();

};



double Division::GetResult()

{

return leftValue / rightValue;

}



/* 工厂类,根据不同的需求生产不同的运算类 */

class OperationFactory

{

public:

Operation * CreateOperate(char);

};



Operation * OperationFactory::CreateOperate(char type)

{

switch (type)

{

case '*':

return new Multi();

break;

case '/':

return new Division();

break;

case '+':

return new Add();

break;

case '-':

return new Minus();

break;

default:

return new Add();

break;

}

}



int main()

{

int n;

freopen("in.txt", "r", stdin);

OperationFactory factory;

scanf("%d", &n);

while (n--)

{

double leftValue;

double rightValue;

char type;

cin >> leftValue >> rightValue >> type;

Operation * operation = factory.CreateOperate(type);

operation->leftValue = leftValue;

operation->rightValue = rightValue;

cout << operation->leftValue << " " << type << " "

<< operation->rightValue << " = " << operation->GetResult() << endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: