GOF23设计模式之状态模式的理解与实现


 
状态模式:
 
     场景:
 
         电梯的运行:
 
              维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态
 
         红绿灯
 
              红灯,黄灯,绿灯
 
         企业或政府系统
 
              公文审批状态
 
                   报销单据审批状态
 
                   假条审批
 
              网上购物时,订单的状态
 
                   下单
 
                   已付款
 
                   已发货
 
                   送货中
 
                   已收货
 
         酒店系统中,房间的状态变化:
 
              已预定
 
              已入住
 
              空闲
 
应用场景:
 
         银行系统账户状态
 
         OA系统中公文状态的管理
 
         酒店系统中房间状态的管理
 
         线程对象各状态的作用
 
 =========================================
/**
 * 状态类:
 */
package com.bjsxt.cn.state;
public interface State {
 public void handle();
}
=============================================================
/**
 * 已经预定状态
 */
package com.bjsxt.cn.state;
public class BookedState implements State {
 @Override
 public void handle() {
  System.out.println("已经预定,等待入住");
 }
}
============================================================
/**
 * 已经入住状态
 * 2015年4月17日20:20:20
 */
package com.bjsxt.cn.state;
public class CheckedInState implements State {
 @Override
 public void handle() {
  System.out.println("已经入住");
 }
}
==============================================================
/**
 * 表征的空闲状态
 * 2015年4月17日20:16:58
 */
package com.bjsxt.cn.state;
public class FreeState implements State {
 @Override
 public void handle() {
  System.out.println("空闲状态,可以入住");
 }
}
=============================================================
/**
 * 房间上下文,持有状态成员变量。
 * 2015年4月17日20:21:21
 */
package com.bjsxt.cn.state;
public class HouseContext {
 private State state;
 public HouseContext() {
 }
 public void setState(State state) {
  System.out.println("修改状态");
  this.state = state;
  state.handle();
 }
}
===========================================================
/**
 * 测试程序:测试状态模式的代码
 * 状态模式多用在一个东西具有多个状态。状态切换的时候在传统上我们使用的是if结构,
 * 但是这种结构有着致命的问题,但还是同样的问题,后期不利于维护,尤其是在状态奇幻的时候需要
 * 更改原有代码违法开闭原则。
 * 
 */
package com.bjsxt.cn.state;
public class Client {
 public static void main(String[] args) {
  HouseContext ctx = new HouseContext();
  ctx.setState(new FreeState());
  
  ctx.setState(new BookedState());
 }
}
/*
 修改状态
空闲状态,可以入住
修改状态
已经预定,等待入住
 * 
 * */

 
 
 
 
 

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值