设计模式观后(c++还原 里氏替换原则)
2014-09-04 15:21
337 查看
买了本设计模式,来看看学习吧!以前的笔记都放在github 上面的,这个就放csdn上吧!自己天天更新!
//里氏替换原则
1子类完全实现父类的方法
2子类可以有自己的个性
3覆盖实现父类方法时输入参数可以被放大。
//手枪、士兵、场景设计 class AbstractGun { public: virtual void shoot() { cout << "kill people!"; } }; class HandGun : public AbstractGun { public: virtual void shoot() { cout << "handgun kill"; } }; class Rifle : public AbstractGun { public: virtual void shoot() { cout << "rifle kill"; } }; class MachineGun : public AbstractGun { public: virtual void shoot() { cout << "machinegun kill"; } }; class Soldier { public: void SetGun(AbstractGun* _gun) { m_gun = _gun; } virtual void KillEnemy() { m_gun->shoot();//这个很好,可以分别执行虚函数。 } virtual ~Soldier() {}; protected: AbstractGun* m_gun; }; //当添加新类“玩具枪”的时候,玩具枪杀不死人,无法执行killenemy等。 //如果子类不能完整的实现父类的方法, //建议断开父子关系,采用依赖、聚集、组合等关系替代继承。 class ToyGun { public: /////.......///// }; //子类可以有自己的个性 class AUG : public Rifle { public: void zoomeout() { cout << "observed enemy"; } virtual void shoot() { cout << "AUG kill"; } }; //添加狙击枪,就要给个狙击手,我自己设计派生(或许其他情况是不允许的吧) class Snipper : public Soldier { public: virtual void KillEnemy() { AUG* aug = static_cast<AUG*>(m_gun); aug->zoomeout(); aug->shoot(); } }; class Client { public: //这里使用static,表示外部可以直接所属域调用,为了方便设定。 static void Action() { Snipper* shibin = new Snipper; shibin->SetGun(new AUG); shibin->KillEnemy();//开始杀敌 } };
相关文章推荐
- 设计模式观后(c++还原之十九 观察者模式)
- 设计模式观后(c++还原之五 单例模式)
- 设计模式观后(c++还原之十五 策略模式)
- 设计模式观后(c++还原之十三 责任链模式)
- 设计模式观后(c++还原之六 虚拟工厂)
- 设计模式观后(c++还原之十八 组合模式)
- 设计模式观后(c++还原之七 模板方法模式)
- 设计模式观后(c++还原之二十四 解释器模式)
- 设计模式观后(c++还原之二 依赖的信用)
- 设计模式观后(c++还原之六 工厂模式)
- 设计模式观后(c++还原之二十五 享元模式)
- 设计模式观后(c++还原之二十六 桥梁模式)
- 设计模式观后(c++还原之十一 中介者模式)
- 设计模式观后(c++还原之十 代理模式)
- 设计模式观后(c++还原之二十 门面模式)
- 设计模式观后(c++还原之二十一 备忘录模式)
- 设计模式观后(c++还原之九 代理模式)
- 设计模式观后(c++还原之四 开闭原则 )
- 设计模式观后(c++还原之二十三 状态模式)
- 设计模式观后(c++还原之十七 迭代器模式)