欢迎来到天天文库
浏览记录
ID:37970696
大小:257.19 KB
页数:6页
时间:2019-06-04
《[架构设计]设计模式C++实现--策略模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、模式定义 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。模式结构 举例: 游泳池中有不同种类的鸭子,有绿头鸭,红头鸭,橡皮鸭,木头鸭等。不同鸭子的特征或行为不同。绿头鸭(MallardDuck)可以叫声是“quack”,会飞;橡皮鸭叫声是“queak”,不会飞;木头鸭不会叫,也不会飞。利用面向对象原理来设计来泳池中的各种鸭。要求:1.可扩展性好,当有新鸭加入时或鸭的行为有变动时,不用大量改动代码;2.复用性强。 设计UML图 其中,Duck为一个基类,MallardDuck
2、,RedheadDuck,RubberDuck,DecoyDuck继承自Duck。FlyBehavior,QuackBehavior为鸭子的飞行和叫声行为,在java中可用接口表示,在C++中用抽象类表示。FlyWithWings等方法用来实现鸭子的行为。代码实现及执行结果:[cpp] viewplaincopy1.#include 2.//飞行行为,用抽象类表示 3.ClassFlyBehavior{ 4.public: 5. virtual ~FlyBehavior(){}; 6. virtual voi
3、d fly() =0; 7.}; 1.//叫声行为,用抽象类表示 2.ClassQuackBehavior{ 3.public: 4. virtual ~QuackBehavior(){}; 5. virtual void quack()= 0; 6.}; 7.//鸭子基类,有display,performFly, performQuack,swim等方法。 8.ClassDuck{ 9.public: 10. Duck(FlyBehavior*p_FlyBehavior,QuackBehavior* p_Quac
4、kBehavior) 11. { 12. pFlyBehavior= p_FlyBehavior; 13. pQuackBehavior= p_QuackBehavior; 14. 15. } 16. virtual ~Duck(){}; 17. virtual voiddisplay(){}; 18. void performFly() 19. { 20. pFlyBehavior->fly(); 21. } 22. void performQuack()
5、23. { 24. pQuackBehavior->quack(); 25. } 26. void swim() 27. { 28. std::cout<<("All ducks float, even decoys!")<< std::endl; 29. } 30.private: 31. FlyBehavior*pFlyBehavior; 32. QuackBehavior*pQuackBehavior; 33.}; 34.//实现飞行行为的方法类 35.classFlyW
6、ithWings : public FlyBehavior{ 36.public: 37. void fly(){ 38. std::cout<< ("I'm flying!!")<7、 5.ClassQuack : public QuackBehavior{ 6.public: 7. void quack(){ 8. std::cout<< ("Quack") <>")<< std::endl; 16. } 17.}; 18.8、 19.classSqueak : public QuackBehavior{ 20.public: 21.
7、 5.ClassQuack : public QuackBehavior{ 6.public: 7. void quack(){ 8. std::cout<< ("Quack") <>")<< std::endl; 16. } 17.}; 18.
8、 19.classSqueak : public QuackBehavior{ 20.public: 21.
此文档下载收益归作者所有