// 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,布布扣,bubuko.com
原文:http://blog.csdn.net/wayneforever/article/details/21599929