欢迎来到天天文库
浏览记录
ID:40316818
大小:164.50 KB
页数:6页
时间:2019-07-31
《设计模式学习笔记》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
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;}
此文档下载收益归作者所有