GOF 23 设计模式之 状态模式

来源:互联网 发布:在职研究生网络教育 编辑:程序博客网 时间:2024/05/29 16:27

场景

  • 红绿灯
    • 红灯,绿灯,黄灯
  • 网上购物时,订单的状态
    • 下单
    • 已付款
    • 已发货
    • 送货中
    • 已收货

核心

  • 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题

结构

  • Context环境类
    • 环境类中维护一个State对象,他是定义了当前的状态
  • State抽象状态类
  • ConcreteState具体状态类
    • 每一个类封装了一个状态对应的行为
      这里写图片描述

开发当中常见的场景

  • 银行系统中帐号状态的管理
  • OA系统中公文状态的管理
  • 酒店系统中,房间状态的管理
  • 线程对象各状态之间的切换

代码实现

  • State
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public interface State {    void handle();}
  • FreeState
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public class FreeState implements State {    @Override    public void handle() {        System.out.println("房间空闲,没人住");    }}
  • BookedState
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public class BookedState implements State {    @Override    public void handle() {        System.out.println("房间已预定,别人不能定");    }}
  • CheckedState
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public class CheckedState implements State {    @Override    public void handle() {        System.out.println("房间已入住,请勿打扰");    }}
  • Context
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public class Context {    private State state;    public void setState(State state) {        System.out.println("修改状态");        this.state = state;        state.handle();    }}
  • Client
package com.coderbean.state;/** * Created by Chang on 15/10/5. */public class Client {    public static void main(String[] args) {        Context context = new Context();        context.setState(new FreeState());        context.setState(new BookedState());    }}
0 0
原创粉丝点击