现在的位置: 首页 > 综合 > 正文

适配器模式,换个包装再度利用 Adapter

2019年01月10日 ⁄ 综合 ⁄ 共 1111字 ⁄ 字号 评论关闭
// example10.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"

//假设现在已经有一个类,已经实现了一些功能,并且该类经过测试已经十分稳定。

//计算阶乘 n!
class  Factorial
{
public:
	int getFactorial(int n)
	{
		int product = 0;
		if ((0 == n) || (1 == n))
		{
			product = 1;
		}
		else
		{
			product = n * getFactorial( n - 1);
		}
		return product;
	};
};


//但我们现在想要一个计算阶乘之和的功能 0! + 1! + 2! + ....n!
//如果实现呢?首先要想到我们已经把计算阶乘都搞定了,上个类测试
//没有任何问题,大胆放心用吧

//定义一个抽象类吧。只定义我们需要的接口
//任何事情先想我们要什么,先不用考虑如何实现它的功能,从繁琐的
//的实现中解脱出来,把实现交给别人吧。
class FactorialSum
{
public:
	virtual int getFactorialSum(int n) = 0;
};


//实现方法一:
//具体来实现这个接口吧, 先通过委托来实现吧
class ConcreteFactorialsun1 : public FactorialSum
{
public:
	Factorial fac;
	int getFactorialSum(int n)
	{
		int sum = 0;
		for(int i=0; i<=n; i++)
		{
			sum += fac.getFactorial(i);
		}
		return sum;
	};
};


//实现方法二:
//具体来实现这个接口吧, 通过多重继承来实现吧
class ConcreteFactorialsun2 : public FactorialSum, Factorial
{
public:
	int getFactorialSum(int n)
	{
		int sum = 0;
		for(int i=0; i<=n; i++)
		{
			sum += getFactorial(i);
		}
		return sum;
	};
};



int _tmain(int argc, _TCHAR* argv[])
{
	FactorialSum *pfs1 = new ConcreteFactorialsun1;
	printf("sum=%d\n", pfs1->getFactorialSum(5));

	delete pfs1;

	pfs1 = new ConcreteFactorialsun2;
	printf("sum=%d\n", pfs1->getFactorialSum(5));
	delete pfs1;

	getchar();
	return 0;
}

抱歉!评论已关闭.