如何解决程序重构的OOP设计模式
我的问题是根据面向对象的编程原则重构程序。程序在一个 while 循环中无休止地运行,所有操作都在这个主 while 循环中。这个主循环有一个 switch-case 语句。
它有 11 种情况,所有情况都代表语句,如 unplanned_stop
、planned_stop
、read_data_from_x
、read_data_from_y
……此外,这些状态中有 if-else 子句可以调用不同的功能。根据 if-else 决定,每个状态都指向另一个状态以进行下一步。
我已经搜索过,状态设计模式似乎很适合这个解决方案,但我不确定。 主循环是这样的:
while(programIsRunnning)
{
switch(programState)
{
case state.StartOfLoop:
if(..) doSomething();
else doAnotherThing();
programState = state.PlannedStop;
break;
case state.PlannedStop:
if(..) programState = state.ReadDataFromX;
else programState = state.ReadDataFromY;
case state.ReadDataFromX:
if(..) programState = state.UnplannedStop;
else programState = state.StartOfLoop;
.
.
.
我希望我能解释得足够多。这种设计令人讨厌且难以理解在哪里实施新规范。对于程序的每个新请求,我都必须编辑其他状态和 if-else 子句。我是一名大三学生,我所能想到的就是用 OOP 设计模式重新编码它。欢迎提出任何建议。
解决方法
您的任务非常适合使用 State pattern,下面我提供了一个示例代码,说明类依赖项的外观。我们将大开关拆分为几个类,每个类负责处理一种状态,并可以将程序转移到其他状态。
比如我用的是Python语言,因为它比较直观,并且勾勒出几个类似于我曾经解决的问题的类,我还明确添加了切换到它和离开它时调用状态的方法,有时这很有用。
class StateInterface:
def on_enter(self):
...
def work(self):
...
def on_leave(self):
...
class StateOne(StateInterface):
def __init__(self,main_program):
self.main_program = main_program
def on_enter(self):
# do some init
...
def work(self):
# do some work
new_state = StateTwo(self.main_program)
self.main_program.change_state(new_state)
def on_leave(self):
# do some clear
...
class StateTwo(StateInterface):
...
class MainProgram:
def __init__(self,initial_state: StateInterface):
self.current_state = initial_state
def infinite_loop(self):
while not self.stopped:
self.current_state.work()
def change_state(self,new_state: StateInterface):
self.current_state.on_leave()
self.current_state = new_state
self.current_state.on_enter()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。