码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-17 22:18:49      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:gof23   状态模式i   



状态模式:

     场景:

         电梯的运行:

              维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态

         红绿灯

              红灯,黄灯,绿灯

         企业或政府系统

              公文审批状态

                   报销单据审批状态

                   假条审批

              网上购物时,订单的状态

                   下单

                   已付款

                   已发货

                   送货中

                   已收货

         酒店系统中,房间的状态变化:

              已预定

              已入住

              空闲

应用场景:

         银行系统账户状态

         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());
 }
}
/*
 修改状态
空闲状态,可以入住
修改状态
已经预定,等待入住
 * 
 * */






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

标签:gof23   状态模式i   

原文地址:http://blog.csdn.net/lk142500/article/details/45101933

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!