Design Pattern 设计模式1 - Strategy 1
2017-06-02 09:32
330 查看
实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数
Strategy设计的思路:
基类A。更加小的基类B,新的继承类C:
1 从基类A中抽出一个更加小的基类B
2 利用这个更加小的基类B实现不同的效果
3 把这个更加小的基类B包括进基类A中去
4 新的继承类C仅仅须要和基类A打交道,设计不同行为,不须要理会更加小的基类B
#pragma once #ifndef _STRATEGY_HEROS_H #define _STRATEGY_HEROS_H #include <stdio.h> //Interface class HeroAttack { public: virtual void attack() = 0; }; //Base method class class Laser : public HeroAttack { public: void attack() { puts("Super Eye-Laser"); } }; class Smash : public HeroAttack { public: void attack() { puts("I smash!"); } }; class WebWebWeb : public HeroAttack { public: void attack() { puts("Web, Web, Web!"); } }; //Base Class class Hero_From_Marvel { HeroAttack *heroAtt; protected: void setAttackWay(HeroAttack *hat) { if (heroAtt) delete heroAtt; heroAtt = hat; } public: Hero_From_Marvel() : heroAtt(nullptr) { } virtual ~Hero_From_Marvel() { if (heroAtt) delete heroAtt; heroAtt = nullptr; } void attack() { heroAtt->attack(); } }; //derived class class SuperMan : public Hero_From_Marvel { public: SuperMan() { setAttackWay(new Laser);//这里不能使用malloc,否则内存冲突 } }; class Hulk : public Hero_From_Marvel { public: Hulk() { setAttackWay(new Smash); } }; class SpiderMan : public Hero_From_Marvel { public: SpiderMan() { setAttackWay(new WebWebWeb); } }; int StrategyHerosRun() { const int HEROS = 3; Hero_From_Marvel *hfm[HEROS] = {new SuperMan, new Hulk, new SpiderMan}; for (int i = 0; i < HEROS; i++) { hfm[i]->attack(); delete hfm[i]; } return 0; } #endif
相关文章推荐
- Head First 设计模式 Design Pattern 1-2 Strategy, Observer
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 策略模式(Strategy) - Java实现
- Design Pattern 设计模式1 - Strategy 1
- 深入浅出设计模式-学习笔记(1) Strategy
- 设计模式之Strategy(策略)
- 设计模式(Design Pattern)扫盲
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
- 设计模式与泡mm的关系之strategy策略模式及再思考
- 设计模式之Strategy(策略)
- ACE中的设计模式(3)——Strategy
- 设计模式简单代码之Strategy模式
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- [设计模式(一)]template method模式和strategy模式
- [用设计模式锻炼C#系列]之Strategy
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 设计模式之Strategy——简历篇
- 设计模式之Strategy——简历篇(原创)
- 设计模式(18)-策略模式(Strategy)
- .Net中的设计模式——Strategy模式