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 @   雾枫  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
点击右上角即可分享
微信分享提示