模式定义
State模式允许一个对象在内部状态改变时它的行为也随着改变,实现其类在运行时的动态修改。
使用范围
- 行为取决于对象的状态
- 太多的分支语句来区别处理不同状态下的行为
使用方法
举例说明
Socket网络编程中假设我们定义它有三个状态,Open, Listen和Close。从不同的状态中抽象出一个接口 TcpStatus。该接口定义了网络操作中的三个方法,建立连接,显示当前状态,退出连接。
public interface TcpStatus {
void establish();
void exit();
void acknowledge();
}
再定义TcpStatus的三个状态。注意每个状态下的不同方法定义了不同的行为,该行为是根据当前状态而定的。
public class TcpOpen implements TcpStatus{
public void acknowledge() {
System.out.println("tcp connection opened");
}
public void exit() {
System.out.println("Conn Closing");
}
public void establish() {
System.out.println("Conn opened");
}
}
----------------
public class TcpListen implements TcpStatus{
public void acknowledge() {
System.out.println("Conn listening");
}
public void establish() {
System.out.println("Conn opened, can not open again");
}
public void exit() {
System.out.println("Closing");
}
}
----------------
public class TcpClose implements TcpStatus {
public void acknowledge() {
System.out.println("Conn closed");
}
public void exit() {
System.out.println("Conn closed, can not close again.");
}
public void establish() {
System.out.println("Conn opening");
}
}
建立一个Context,用来管理状态的切换和更新。
public class TcpConnection {
private TcpStatus status;
public void open(){
this.status = new TcpOpen();
this.status.establish();
this.status = new TcpListen();
}
public void close(){
this.status.exit();
this.status = new TcpClose();
}
public void acknowledge(){
this.status.acknowledge();
}
}
客户端方法:
public class StateClient {
public static void main(String args[]){
TcpConnection conn = new TcpConnection();
conn.open();
conn.acknowledge();
conn.close();
conn.acknowledge();
conn.open();
conn.close();
conn.acknowledge();
conn.close();
}
}
运行结果:
Conn opened Conn listening Closing Conn closed Conn opened Closing Conn closed Conn closed, can not close again.
下载示例
本文介绍State模式的概念及其在Socket网络编程中的应用。通过定义不同状态的行为,实现对象状态转换时行为的变化,有效避免了大量的条件分支。

被折叠的 条评论
为什么被折叠?



