(C/C++ 版) 设计模式 学习之 工厂模式 (1)

2015-01-24 13:18:39 · 作者: · 浏览: 7

大话设计模式这本书使用 C# 语言写的,我用的是 C++ 语言,最近在看这本书,所以用 C++ 语言走了一遍。

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

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

?

//User.cpp --- 客户端

#include iostream

int main()
{
	using namespace std;
	cout<>number_a;
	cout<>opera;
	cout<>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<
  
   可以看出,很呆板,很麻烦,自能实现特定计算,不可调用,没有移植的可能。
   

?

而 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<>myOpera.number_a;

	cout<>myOpera.number_b;

	cout<>myOpera.sign;

	float my_result = myOpera.calculate();
	cout<
    
     

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

?

?