- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[架构设计]设计模式C实现--策略模式
模式定义??策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。模式结构? 举例: 游泳池中有不同种类的鸭子,有绿头鸭,红头鸭,橡皮鸭,木头鸭等。不同鸭子的特征或行为不同。绿头鸭(MallardDuck)可以叫声是“quack”,会飞;橡皮鸭叫声是“queak”,不会飞;木头鸭不会叫,也不会飞。利用面向对象原理来设计来泳池中的各种鸭。要求:1.可扩展性好,当有新鸭加入时或鸭的行为有变动时,不用大量改动代码;2.复用性强。?设计UML图 其中,Duck为一个基类,MallardDuck,RedheadDuck, RubberDuck, DecoyDuck继承自Duck。FlyBehavior, QuackBehavior为鸭子的飞行和叫声行为,在java中可用接口表示,在C++中用抽象类表示。FlyWithWings等方法用来实现鸭子的行为。代码实现及执行结果:[cpp]?/walkerkalr/article/detailsiew plain/walkerkalr/article/detailsopy#include?iostream?//飞行行为,用抽象类表示?Class FlyBehavior{??public:???virtual?~FlyBehavior(){};???virtual?void?fly()?=0;??};??//叫声行为,用抽象类表示?Class QuackBehavior{??public:???virtual?~QuackBehavior(){};???virtual?void?quack()=?0;??};??//鸭子基类,有display,performFly,?performQuack,swim等方法。?Class Duck{??public:???Duck(FlyBehavior*p_FlyBehavior,QuackBehavior*?p_QuackBehavior)???{???pFlyBehavior=?p_FlyBehavior;???pQuackBehavior=?p_QuackBehavior;????}???virtual?~Duck(){};???virtual?void display(){};???void?performFly()???{???pFlyBehavior-fly();???}???void?performQuack()???{???pQuackBehavior-quack();???}???void?swim()???{???std::cout(All?ducks?float,?even?decoys!)?std::endl;???}??private:???FlyBehavior* pFlyBehavior;???QuackBehavior* pQuackBehavior;??};??//实现飞行行为的方法类?classFlyWithWings?:?public?FlyBehavior{??public:???void?fly(){???std::cout?(Im?flying!!)std::endl;???}??};???classFlyNoWay?:?public?FlyBehavior{??public:???void?fly(){???std::cout?(I?cant?fly)std::endl;???}??};??//实现叫声行为的类?Class Quack?:?public?QuackBehavior{??public:???void?quack(){???std::cout?(Quack)?std::endl;???}??};???Class MuteQuack?:?public?QuackBehavior{??public:???void?quack(){???std::cout?(?Slience?)?std::endl;???}??};???classSqueak?:?public?QuackBehavior{??public:???void?quack(){???std::cout?Squeakstd::endl;???}??};??//绿头鸭类?classMallardDuck?:?public?Duck{??public:???MallardDuck(FlyBehavior*fly_behavior?=?new?FlyWithWings(),???QuackBehavior*quack_behavior?=?new?Quack())???:Duck(fly_behavior,quack_behavior){}???void?display(
文档评论(0)