// 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;
}
适配器模式,换个包装再度利用 Adapter
最新推荐文章于 2021-06-09 11:31:19 发布