欢迎来到天天文库
浏览记录
ID:54861817
大小:304.72 KB
页数:5页
时间:2020-04-22
《[架构设计]设计模式C++实现--适配器模式.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、模式定义: 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器可以分为类适配器和对象适配器。 类适配器使用多重继承对一个接口与另一个接口进行匹配。 对象适配器依赖于对象组合。 客户使用适配器的过程:1. 客户通过目标接口调用适配器的方法对适配器发出请求。2. 适配器使用被适配者接口把请求转换成被施培者的一个或多个调用接口3. 客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。模式结构: 类适配器对象适配器举例:现在假设你缺少鸭
2、子对象(叫声为Quack,飞行输出”I’mflying!”),想用一些火鸡对象(叫声为”Gobblegobble”飞行输出”I’mflyingashortdistance!”)来冒充。显而易见,因为火鸡的接口(行为)不同,所以我们不能公然拿来使用。UML设计:编程实现及执行结果:[cpp] viewplaincopy1.#include 2. 3.using namespace std; 4.//定义鸭子类 5.class Duck 6.{ 7.public: 8. virtual void quack()
3、{}; 9. virtual void fly(){}; 10.}; 11.//定义绿头鸭 12.class MallardDuck : public Duck 13.{ 14.public: 15. void quack() 16. { 17. cout << "Quack" << endl; 18. } 19. 20. void fly() 21. { 22. cout << "I'm flying" << endl; 23. } 24.};
4、 25.//定义火鸡 26.class Turkey 1.{ 2.public: 3. virtual void gobble(){} 4. virtual void fly(){} 5.}; 6.//定义野火鸡 7.class WildTurkey : public Turkey 8.{ 9.public: 10. void gobble() 11. { 12. cout << "Gobble gobble" << endl; 13. } 14. void fly()
5、 15. { 16. cout << "I'm flying a short distance" << endl; 17. } 18.}; 19.//定义火鸡适配器 20.class TurkeyAdapter : public Duck 21.{ 22.public: 23. TurkeyAdapter(Turkey* tur):turkey(tur){} 24. 25. void quack() 26. { 27. turkey->gobble(); 28.
6、 } 29. void fly() 30. { 31. turkey->fly(); 32. } 33.private: 34. Turkey* turkey; 35.}; 36.//客户代码 37.int main() 38.{ 39. Duck* duck = new MallardDuck(); 40. duck->quack(); 41. duck->fly(); 42. 43. Duck* turkeyAdapter = new Turke
7、yAdapter(new WildTurkey()); 44. turkeyAdapter->quack(); 1. turkeyAdapter->fly(); 2. return 0; 3.} 执行结果:QuackI'mflyingGobblegobbleI'mflyingashortdistance请按任意键继续... 适配器和装饰者模式比较:适配器:将一个接口转成另一个接口。包装某些对象,让它们的接口看起来不像自己而像别的东西。装饰者:不改变接口,但加入责任。将对象包装起来,让新行为加入类中。
此文档下载收益归作者所有