写在前面:这个例子是读《C++代码整洁之道》时学到的。前段时间学习了一下UML图的相关知识,当时不理解接口的作用,读到这个例子后豁然开朗,现在分享给大家。
需求:一个开关类,一个灯。使用开关类控制灯的亮灭。
分析:开关不仅仅可以控制电灯,还可以控制风扇,空调。这时候就可以通过接口来实现,
如果一个类有开关的功能,那么就继承这个接口。
代码如下:
#include<iostream>
using namespace std;
//一个接口,一个开关,一个灯
class switchFace {
public:
virtual void turnOn ( ) = 0;
virtual void turnOff ( ) = 0;
};
class switchPhysics {
public:
switchPhysics (switchFace* _switch);
void changeTurn ( );
private:
switchFace *a_switch;
bool switchFlag = false;
};
class lamp :public switchFace {
public:
void turnOn ( ) override;
void turnOff ( ) override;
};
class fan :public switchFace {
public:
void turnOn ( )override;
void turnOff ( )override;
};
switchPhysics::switchPhysics (switchFace* _switch)
{
a_switch = _switch;
}
void switchPhysics::changeTurn ( )
{
if (switchFlag) {
a_switch->turnOff();
switchFlag = !switchFlag;
}
else {
a_switch->turnOn ( );
switchFlag = !switchFlag;
}
}
void lamp::turnOn ( )
{
cout << "开灯" << endl;
}
void lamp::turnOff ( )
{
cout << "关灯" << endl;
}
int main ( ) {
lamp a_lamp;
switchPhysics a_switch (&a_lamp);
for (int i = 0; i < 5; i++) {
a_switch.changeTurn ( );
}
fan a_fan;
switchPhysics b_switch (&a_fan);
for (int i = 0; i < 5; i++) {
b_switch.changeTurn ( );
}
return 0;
}
void fan::turnOn ( )
{
cout << "风扇打开" << endl;
}
void fan::turnOff ( )
{
cout << "风扇关闭" << endl;
}
代码命名也是战斗力,类和函数的命名仓促了。你有什么好的命名,评论区见