网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 核心技术 > 高级编程 > 该如何实践State模式  

该如何实践State模式

2008-04-23  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

State模式将对象行为的变化封装成具有统一接口的状态,它与Strategy模式的区别在于任何状态的改变都是定义好的,即“改变行为”的动作由自己来做。
<!--[if !vml]-->
          <!--[endif]-->
下面是自动门的状态图,它描述了“开”与“关”两个状态之间的变化条件。
         <!--[if !vml]--> 中国网管联盟bitsCN.com
         <!--[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());
    }
}
由两个具体状态类可知,具体状态之间的转换由它们自身定义。

TAGs
 上一篇:Tapestry组件使用总结   下一篇:给大家个jquery $.getJSON的例子
该如何实践State模式 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: