设计模式之简单工厂模式
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;
}
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;
}
相关文章推荐
- C#设计模式学习笔记---简单工厂模式
- C#设计模式之简单工厂篇
- 用 Delphi 学设计模式 之 简单工厂篇- -
- 设计模式 之 简单工厂
- JAVA设计模式——简单工厂(Simple Factory)模式
- .NET设计模式(1): 简单工厂模式
- C#设计模式之简单工厂篇
- 设计模式之-简单工厂、工厂方法、抽象工厂
- C#设计模式之简单工厂篇
- 第一个设计模式:简单工厂
- 最简单的工厂设计模式 Factory
- [导入]C#设计模式之简单工厂篇
- C#设计模式之简单工厂
- 简单工厂设计模式-设计模式(1)
- 设计模式之Factory1(简单工厂,工厂方法,抽象工厂的比较)
- C#设计模式之简单工厂篇
- C#设计模式之简单工厂篇
- Dot Net 设计模式—简单工厂
- 简单工厂设计模式
- 设计模式-工厂模式-简单工厂