您的位置:首页 > 编程语言 > C语言/C++

<C/C++ 版> 设计模式 学习之 工厂模式 <1>

2014-12-30 17:51 741 查看
大话设计模式这本书使用 C# 语言写的,我用的是 C++ 语言,最近在看这本书,所以用 C++ 语言走了一遍。

以下是部分笔记,包括代码

若不涉及面向对象这个概念,我们写的简易计算器可能是下面这个样子

//User.cpp --- 客户端

#include "iostream"

int main()
{
	using namespace std;
	cout<<"Input First Number : ";
	int number_a;
	cin>>number_a;
	cout<<"Input your operation : ";
	char opera;
	cin>>opera;
	cout<<"Input Second Number : ";
	int number_b;
	cin>>number_b;

	int avaliable = 1;
	float result = 0;

	switch(opera)
	{
	case '+': result = number_a + number_b; break;
	case '-': result = number_a - number_b; break;
	case '*': result = number_a * number_b; break;
	case '/': 
		{
			if(number_b)
			{
				result = number_a / number_b; 
				break;
			}
			else avaliable = 0;
		}
	default: result = 0;
	}

	if(avaliable)
		cout<<"The result is : "<<result<<endl;
	else cout<<"The Second Number connot be 0 !"<<endl;

	return 0;
}
可以看出,很呆板,很麻烦,自能实现特定计算,不可调用,没有移植的可能。

而 C++ 是一种面向对象的语言,下面我们用 OOP 思想来重写这段代码。

下面是一个简单的例子,不是很合题,循序渐进。可配合《大话设计模式》这本书来看。

//Factory.h

#ifndef FACTORY_H
#define FACTORY_H

class operate
{
public:
	int number_a;
	int number_b;
	char sign;
	float result;

public:
	float calculate();
};

#endif


//Factory.cpp

#include "Factory.h"

float operate::calculate()
{
	switch(sign)
	{
		case '+': result = number_a + number_b; break;
		case '-': result = number_a - number_b; break;
		case '*': result = number_a * number_b; break;
		case '/': 
			{
				if(number_b)
				{
					result = number_a / number_b; 
					break;
				}
			}
		default: result = 0;
	}
	return result;
}


//User.cpp --- 客户端

#include "Factory.h"
#include "iostream"

int main()
{
	using namespace std;

	operate myOpera;

	cout<<"Input First Number : ";
	cin>>myOpera.number_a;

	cout<<"Input Second Number : ";
	cin>>myOpera.number_b;

	cout<<"Input Operate sign : ";
	cin>>myOpera.sign;

	float my_result = myOpera.calculate();
	cout<<"Result is : "<<my_result<<endl;
}


上面就是 OOP 模式了。咱们继续设计模式,下面实现工厂模式。

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