设计模式学习笔记

设计模式学习笔记

ID:40316818

大小:164.50 KB

页数:6页

时间:2019-07-31

设计模式学习笔记_第1页
设计模式学习笔记_第2页
设计模式学习笔记_第3页
设计模式学习笔记_第4页
设计模式学习笔记_第5页
资源描述:

《设计模式学习笔记》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、设计模式学习笔记1、策略模式案例:鸭子游戏      有两种鸭子,MallardDuck和RedheadDuck,鸭子的行为有Quack和swim和fly和display。两种鸭子的Quack、Swim、Fly行为是一样的,display则不同。设计:变化:1、要让MallardDuck鸭子可以Fly,但是RedheadDuck不可以Fly这么办?2、两种鸭子Quck、Swim具体的实现也不可以相同。策略模式:说明:1、找到变化并且把它封装起来。这里Quack()和Fly()是变化的,所以把他封装起来。2、Swim()每种鸭子都是一样的,所以放在基类里。3、Display

2、虽然也是变化的,但是每个鸭子都有这种方法,所以在基类中用了个纯虚函数实现。代码:#includeusingnamespacestd;classFlyBehavior{public:virtualvoidfly(){   printf("fly!");}};classFlywithwings:publicFlyBehavior{public:voidfly(){   printf("Flywithwings!");}};class Flynoway:publicFlyBehavior{public:voidfly(){  printf("Flyn

3、oway!");}};classQuackBehavior{public:virtualvoidQuack(){printf("quack!");}};classQuack1:publicQuackBehavior{public:voidQuack() {printf("quack1");}};classQuack2:publicQuackBehavior{public:voidQuack() {printf("quack1");}};classDuck{public:Duck(){     duck_fly=NULL; //这里必须初始化    duck

4、_quack=NULL;}voidPerformQuack(){if(NULL!=duck_quack){duck_quack->Quack();}}voidPerformFly(){if(NULL!=duck_fly){duck_fly->fly();}}voidSetFlyBehavior(FlyBehavior*fly){    duck_fly=fly;}voidSetQuackBehavior(QuackBehavior*quack){     duck_quack=quack;}voidswim(){printf("swim!");}virtualvoid

5、display()=0;//必须写成纯虚函数,否则要实现。private:FlyBehavior*duck_fly;QuackBehavior*duck_quack;};classMallardDuck:publicDuck{public:voiddisplay(){printf("MallardDuckdisplay!");}};classRedheadDuck:publicDuck{public:voiddisplay(){printf("RedheadDuckdisplay!");}};voidmain(){MallardDuckmallard;Flynow

6、ay*fly=newFlynoway;Quack1*quack=newQuack1;mallard.SetFlyBehavior(fly);mallard.SetQuackBehavior(quack);mallard.PerformFly();mallard.PerformQuack();mallard.swim();mallard.display();if(NULL!=fly){deletefly;}if(NULL!=quack){ deletequack;}  return;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。