设计模式之禅-里氏替换原则

设计模式之禅-里氏替换原则
一 简介
里氏替换原则的核心就是:父类存在的地方子类也能存在,但是子类存在的地方父类不一定能存在。
这个原则通常与依赖倒置原则一同使用,实现一种”面向接口编程,非面向实现编程“的思想。
代码介绍(C/C++):
1.创建一个抽象类枪支,提供射击方法接口。

class AbstractGun { public: /*射击*/ virtual void shoot() = 0; };

2.继承抽象基类实现3个具体的枪支类别

/*手枪*/
class HandGun : public AbstractGun {
public:
    void shoot() override {
        cout << "HandGun Shoot..." << endl;
    }
};
/*步枪*/
class RifleGun : public AbstractGun {
public:
    void shoot() override {
        cout << "RifleGun Shoot..." << endl;
    }
};
/*机关枪*/
class MachineGun : public AbstractGun {
public:
    void shoot() override {
        cout << "MachineGun Shoot..." << endl;
    }
};

3.提供一个士兵类来操作枪支

class Soldier {
private:
    /*类的组合*/
    AbstractGun* p_gun;
public:
    /*为这个士兵设置使用的枪支类型,使用的是基类的接口作为参数*/
    void setGun(AbstractGun* gun) {
        this->p_gun = gun;
    }
    /*士兵开始杀敌人*/
    void killEnemy() {
        cout << "Soldier start shoot..." << endl;
        p_gun->shoot();
    }
};

**4.**main来测试

int main() {
    Soldier* s = new Soldier;
    s->setGun(new HandGun);//传递子类的实现
    //s->setGun(new RifleGun);//传递子类的实现
    //s->setGun(new MachineGun);//传递子类的实现
    s->killEnemy();
    return 0;
}

5.测试结果
HandGun:

RifleGun:

MachineGun:

6.本次资料
https://yunpan.cn/cSe29jNSzEDcn 访问密码 b263

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...