当前位置: 首页 > news >正文

产品开发软件东莞网站seo推广

产品开发软件,东莞网站seo推广,电子商务网站模式,顺德高端网站22-Python与设计模式–状态模式 一、电梯控制器 电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计, 把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运…

22-Python与设计模式–状态模式

一、电梯控制器

电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计,
把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运行、停止,那流程也是很复杂的。
首先,开门状态不能开门、运行、停止;停止状态不能关门,停止;运行状态不能开门、关门、运行。
要用一个一个ifelse…实现,首先代码混乱,不易维护;二是不易扩展。至于各种设计原则什么的……
那该如何实现?在上边的逻辑中,每个操作仅仅是一个操作,状态切换与操作是分离的,这也造成后来操作和
状态“相互配合”的“手忙脚乱”。如果把状态抽象成一个类,每个状态为一个子类,每个状态实现什么操作,
不实现什么操作,仅仅在这个类中具体实现就可以了。
下面我们实现这个逻辑。

先实现抽象的状态类:

class LiftState:def open(self):passdef close(self):passdef run(self):passdef stop(self):pass

而后实现各个具体的状态类:

class OpenState(LiftState):def open(self):print "OPEN:The door is opened..."return selfdef close(self):print "OPEN:The door start to close..."print "OPEN:The door is closed"return StopState()def run(self):print "OPEN:Run Forbidden."return selfdef stop(self):print "OPEN:Stop Forbidden."return self
class RunState(LiftState):def open(self):print "RUN:Open Forbidden."return selfdef close(self):print "RUN:Close Forbidden."return selfdef run(self):print "RUN:The lift is running..."return selfdef stop(self):print "RUN:The lift start to stop..."print "RUN:The lift stopped..."return StopState()
class StopState(LiftState):def open(self):print "STOP:The door is opening..."print "STOP:The door is opened..."return OpenState()def close(self):print "STOP:Close Forbidden"return selfdef run(self):print "STOP:The lift start to run..."return RunState()def stop(self):print "STOP:The lift is stopped."return self

为在业务中调度状态转移,还需要将上下文进行记录,需要一个上下文的类。

class Context:lift_state=""def getState(self):return self.lift_statedef setState(self,lift_state):self.lift_state=lift_statedef open(self):self.setState(self.lift_state.open())def close(self):self.setState(self.lift_state.close())def run(self):self.setState(self.lift_state.run())def stop(self):self.setState(self.lift_state.stop())

这样,在进行电梯的调度时,只需要调度Context就可以了。业务逻辑中如下所示:

if __name__=="__main__":ctx = Context()ctx.setState(StopState())ctx.open()ctx.run()ctx.close()ctx.run()ctx.stop()

打印如下:

STOP:The door is opening… STOP:The door is opened… OPEN:Run
Forbidden. OPEN:The door start to close… OPEN:The dorr is closed
STOP:The lift start to run… RUN:The lift start to stop… RUN:The
lift stopped…

由逻辑中可知,电梯先在STOP状态,然后开门,开门时运行Run,被禁止,然后,关门、运行、停止。

二、状态模式

状态模式的定义如下:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。

三、状态模式的优点和应用场景

优点:
1、状态模式的优点是结构清晰,相比于ifelse…简约了不少;
2、封装性好,外部调用不必知道内部实现细节。应用场景:
1、行为状态改变的场景。这点在各种控制器中非常常见,同时,逻辑结构为状态转移图的场景中都非常适用

四、状态模式的缺点

1、在状态比较多时,子类也会非常多,不便于管理。
http://www.yayakq.cn/news/339498/

相关文章:

  • 网站建设与制作 试卷与答案泉州企业自助建站系统
  • 沧州市高速公路建设管理局网站wordpress添加多个下载地址
  • 石材网站建设多少钱公路建设项目可行性研究报告编制办法哪个网站查最新版
  • wordpress无法设置中文字体谷歌seo价格
  • 做的成功的地方网站赣州市微程网络科技有限公司
  • 百度验证网站所有权荆州建设网站
  • 公司网站一般是怎么做cdn网站加速
  • 龙华做网站yihe kj无锡seo代理
  • 网站建设的五类成员建设网站代理商
  • 娄底建设企业网站湖北住房和城乡建设厅网站
  • 12数据网站建设网站空间大小怎么看
  • 常德网站建设网站h5微场景制作软件
  • 大学生创新项目申报书 做网站南宁市营商环境建设局网站
  • 没有任何收录的网站做SEM有用吗网站制作流程详解(学做网站第一步)
  • wordpress后台编辑小工具湖南优化电商服务有限公司
  • 网站平台策划方案网络技术培训心得体会
  • 网站建设招标流程图建设网站需要先构建好模型
  • 西安手机网站定制网站建设steam交易链接怎么改
  • 青岛建网站选青岛博采网络湖北科技职业学院
  • 免费绑定域名的建站个人网站建设论文
  • 网站开发开发需求文档模板网站建设中html
  • 关于征求网站建设贵阳网站seo外包
  • 山西省建设厅招标网站首页有私人做网站的吗
  • 世界网站廊坊优化软件
  • 建网站前期设计用那软件个人网页怎么制作
  • 中文域名的网站有哪些网站规划详细设计怎么写
  • 文化公司做网站交文化事业费吗网站推广工做计划范本
  • 古网站典模板绍兴手机网站建设
  • 网络运维和网站开发网站建设找单
  • 找单位做网站需要注意什么购物网站开发多少钱