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; }