捷凌网安JAVA频道
捷凌IT教育
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME 开源技术 其他技术 论坛
 您现在的位置: 捷凌网安 >> Java >> 核心技术 >> 高级编程 >> 正文
该如何实践State模式

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-4-30 2:42:40

State模式将对象行为的变化封装成具有统一接口的状态,它与Strategy模式的区别在于任何状态的改变都是定义好的,即“改变行为”的动作由自己来做。
<!--[if !vml]-->
          <!--[endif]-->
下面是自动门的状态图,它描述了“开”与“关”两个状态之间的变化条件。
         <!--[if !vml]-->
         <!--[endif]-->
抽象状态DoorState提供open()close()两个方法,
package com.zj.doorstate;
 
public interface DoorState {
    void open();
 
    void close();
}
ContextAutoDoor它关联一个DoorState state
package com.zj.doorstate;
 
public class AutoDoor {
    private DoorState state;
    private DoorState open = new Open(this);
    private DoorState close = new Close(this);
 
    public AutoDoor() {
       this.state = open;
    }
 
    public void setSate(DoorState state) {
       this.state = state;
    }
 
    public DoorState getOpenState() {
       return open;
    }
 
    public DoorState getCloseState() {
       return close;
    }
 
    public void open() {
       state.open();
    }
 
    public void close() {
       state.close();
    }
}
ConcreteState有两个。
     状态Open
package com.zj.doorstate;
 
public class Open implements DoorState {
    private AutoDoor door;
 
    public Open(AutoDoor door) {
       this.door = door;
    }
 
    public void close() {
       System.out.println("O.K. Door closed.");
       door.setSate(door.getCloseState());
    }
 
    public void open() {
       System.out.println("Door already opened.");
    }
}
状态Close
package com.zj.doorstate;
 
public class Close implements DoorState {
    private AutoDoor door;
 
    public Close(AutoDoor door) {
       this.door = door;
    }
 
    public void close() {
       System.out.println("Door already closed.");
    }
 
    public void open() {
       System.out.println("O.K. Door opened.");
       door.setSate(door.getOpenState());
    }
}
由两个具体状态类可知,具体状态之间的转换由它们自身定义。
  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11
     
     推荐文章
    推荐文章Java技术开源搜索引擎04-30
    推荐文章Eclipse中建立自己的JUnit测04-30
    推荐文章Eclipse 3.3上安装jadclipse04-30
    推荐文章spring 编程入门十大问题解答04-30
    推荐文章Java编程中Spring的一些负面04-30
    推荐文章Java应用中Hibernate对多表关04-30
    推荐文章关于hibernate的缓存和CRUD04-30
    推荐文章基于Struts1.2的动态多文件上04-30
    推荐文章演示Struts2实现简单上传代码04-30
    推荐文章J2EE学习笔记--Struts初步认04-30
     
     热点文章
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号