设计模式--状态模式

来源:互联网 发布:linux删除用户密码 编辑:程序博客网 时间:2024/06/04 19:15

  一、含义
    状态模式(State Pattern):允许对象在内部状态改变它的行为,对象看起来好像修改了它的类。属于行为型模式,该模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的context对象。
    (在HeadFirst糖果机的例子中,这个模式就将每个状态封装成各自的类,并将投币,退钱等动作委托给代表当前状态的对象,这些行为是会随着内部状态而改变的)。
  二、何时用
    当对象拥有很多状态,且需要根据很多不同的条件进行判断时
  三、如何用
    抽象出各个状态类,来实现State这个相同的接口,已保证状态之间的相互转换。
  四、组成部分
    -a.上下文环境(Context):定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的行为委托给当前的Concrete State对象来处理。行为会随着状态对象改变而改变。(糖果机GumballMachine 就是一个Context)
    -b.抽象状态(State):定义一个所有具体状态的共同接口,任何状态都实现它,这样就能实现状态间的相互转换。
    -c.具体状态(Concrete State):处理来自Context的请求,每一个Concrete State都提供它自己对于请求的实现,所以当Context改变状态是行为也跟着改变。
  五、类图展示及分析
这里写图片描述

  六、优缺点
    优点:
     1.封装了状态的转换规则,对代码集中管理
     2.将所有与状态有关的行为放到同一个类中
     3.状态转换逻辑与状态对象结合,减少了巨大的条件语句块。
    缺点:若使用不当,程序结构和代码则易混乱,加大设计难度。

1 0