专题 |  新闻 |  转载文档 |  控件 |  产品 |  人才 |  项目管理 |  博客  
 论坛 |  Windows |  Visual Studio |  ASP.NET |  VB.NET |  C#.NET |  开源项目 |  搜索  
当前所在位置:首页JAVA  >  正文
专题: 软件 | 服务器 | IT 电子产品 | PC 电脑 | 笔记本 | IE7 | Windows Mobile | Windows 2003 Server | ISA 2006 | Windows Vista
该如何实践State模式
作者:JAVA 发布时间:20080424 文章来源:
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());
    }
}

由两个具体状态类可知,具体状态之间的转换由它们自身定义。

转载文档
.NET
Visual Basic
Visual C++
游戏开发
Java
ASP
Perl
Delphi
Javascript
其他开发语言
数据库开发
网站制作技术
文件格式
其他
文章投稿
Web.Service
ASP.Net
C#.Net
VB/VC.Net
Borland
JAVA
数据库
Unix/Linux
图形美工
安全
VS.Net

中国DotNet俱乐部 || 博客.中国  版权所有
京ICP备05037360号