c++高内聚,松耦合 实例代码

/*
* 练习1、设计一个开关
* 
* 这个开关可以对用电设备进行开关控制,但它不知道要控制的用电设备具体是什么。
* 
* 实现思路:先定义一个具有开关功能的抽象类,然后写两个纯虚函数 on(),off()接口。
*           再定义一个具体的开关类,然后定义一个开关抽象类的引用,用来获取具体的设备,控制其打开和关闭
*           然后定义一个开关抽象类的派生类(用来实现具体的拥有开关属性的用电设备)
*           最后将派生来传递给具体的开关类,从而达到具体的开关类 和 具体的用电设备 互不关联的原则,开关类只负责开关
* 不需要知道它具体控制的是什么设备。
* 
* 最终达到松耦合的效果
* 
* 2023.2.15
*/


//定义具有开关特性的抽象类接口 Switchable
#include <iostream>
class Switchable {
public:
    virtual void on() const = 0;
    virtual void off() const = 0;
    
};

//定义具体的开关类 Switch
class Switch {
private:
    bool state{ false };

private:
    Switchable& m_switchable;

public:
    Switch() = delete;
    explicit Switch(Switchable& switchable):m_switchable(switchable){}
public:
    void toggle() {
        if (state)
        {
            state = false;
            m_switchable.on();
        }
        else {
            state = true;
            m_switchable.off();
        }
    }
};

//通过抽象开关接口,派生一个灯类 Lamp
class Lamp:public Switchable {
private:
    std::string m_name;
public:
    Lamp() = delete;
    explicit Lamp(std::string name):m_name(name){}
public:
    virtual void on() const override{
        std::cout << m_name << ":打开" << std::endl;
    }
    virtual void off()const override {
        std::cout << m_name << ":关闭" << std::endl;
    }
};

int main() {

    Lamp lamp("台灯");
    Switch witch(lamp);
    witch.toggle();
    witch.toggle();

    return 0;
}

 

posted @ 2023-02-15 12:00  雾枫  阅读(59)  评论(0编辑  收藏  举报