最近我正在听一个关于清洁编码的技术讲座。演讲者是一名测试工程师,他强调避免代码中的“if”语句并尽可能多地使用多态。他也主张反对全球各州。
我完全赞同他,但我需要澄清在以下情况中使用多态替换全局状态和“if”语句,
我的文件中有3个州。我想根据文档状态更改UI组件的状态。现在,我使用“if”块和一个包含当前文档状态的枚举类型来转换UI组件的状态。
例如:
enum DOC_STATE
{
DOC_STATE_A = 0,
DOC_STATE_B,
DOC_STATE_C
};
void QMainWindow::handleUi(_docState)
{
switch(_docState)
{
case (DOC_STATE_A):
{
menu.disable();
....
}
case (DOC_STATE_B):
{
menu.enable();
...
}
case (DOC_STATE_C):
{
...
}
}
我认为我可以为每个状态分别设置子类,并在每个类中使用handleUI()方法。调用handleUi()方法调用正确的方法调用。但是说我在我的文档中维护这些对象,每次状态转换时如何从一个对象切换到另一个对象?
换句话说,如何通过跟踪文档状态的变化而不使用全局状态和“if”或Switch语句来处理UI转换?
我使用Qt。感谢。
答案 0 :(得分:2)
如果您使用的是Qt,请查看The Qt State Machine Framework和State Machine Examples。当您的框架已经提供跑车时,无需重新发明轮子:)
答案 1 :(得分:0)
我认为我不理解这个问题,因为答案太简单了:用新状态实例替换指向状态实例的指针并丢弃旧实例。