设计模式 行为型---状态模式

点点圈 提交于 2020-01-06 18:30:07

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

一、状态模式基本介绍

  • 状态模式:它主要用在对象在多个状态转换时,需要对外输出不同的行为的问题。状态和行为之间时一一对应的,可以互相转换;
  • 当一个对象的内在状态改变时,允许改变其行为,这个对象看上去是改变其类。

二、状态模式各组成部分

  • Context类:环境角色,用于维护当前实例,定义实例的当前状态;
  • State类:抽象环境角色,定义一个接口,封装与Context的一个特点接口相关行为;
  • ConcreateState类:具体的状态角色,每一个子类实现与Context一个状态相关行为。

三、金融借贷源码分析

订单状态容易反复变化:

  • 竖的一列属性是订单生命周期的状态和状态码
  • 横的一列是对订单的每一个操作(方法)
  • 中间的状态是该状态的订单在进行该操作后,订单状态的变化

分析过后采用状态模式

  • State:抽象接口,将所有订单操作(方法)放到这个接口中;
  • AbstrateState:State接口方法的模式实现;
  • *State:具体订单状态,重写该状态下的有关操作;
  • StateEnum:订单相关状态枚举;
  • Context:状态模式中的Context,在其中聚合成员变量State,利用构造方法初始化,State随着状态改变更换不同实例。

四、状态模式的注意事项和细节

  • 代码很强的可读性,状态模式将每各状态的行为封装到对应的类中;
  • 方便维护。将容易产生问题的if-else语句删除了,如果每个状态行为都放到一个类中,每次调用方法,都需要判断当前什么状态,不但会产生很多的if-else语句,而且容易出错;
  • 符合ocp原则。容易增删状态;
  • 会产生很多类,每个状态都要一个对应的类,当状态过多时,会产生很多类,加大维护难度;
  • 应用场景:当一个事件或者对象有很多状态,状态之间会互相切换,对不同状态对应着有不同行为的时候,可以考虑状态模式。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!