);
}
/**
* 被动建立连接,并改变状态
*/
@Override
public void passiveOpen(TCPConnection connection) {
changeState(connection, TCPListen.instance);
}
public String toString(){
return "Closed";
}
}
/**
* TCP监听状态,可以发送ACK,SYN,FIN等请求数据
*/
class TCPListen extends TCPState{
public static TCPState instance = new TCPListen();
/**
* 发送请求数据
*/
@Override
public void send(TCPConnection connection) {
changeState(connection, TCPEstablished.instance);
}
public String toString(){
return "Listen";
}
}运行结果:
Send SYN,receive SYN,ACK,etc.
Closed ===> Established
Send FIN,receive ACK of FIN
Established ===> Closed
四、模式优缺点
优点:
1、将于特定状态相关的行为局部化,并将不同状态的行为分割开来。状态模式将所有与某个特定状态相关的行为封装到一个状态对象中,这样通过添加新的子类可以很容易的增加新的状态和转换。
2、使状态转换显示化。状态模式中不同状态之间的转换是通过切换环境类中的变量来实现的,如TCPConnection类中的TCPState对象引用,而不是为多个变量赋值,这样确保状态转换的原子性,防止环境类Context内部状态不一致现象的发生。
3、State对象可以被共享。对于那些没有内部状态,只有行为的轻量级State对象,各Context对象可以共享一个State对象,从而减少对象的数量。
缺点:
1、由于每个状态对应一个对象,所以会导致系统中类和对象的个数增加。
2、状态模式的设计和实现比较复杂,增加系统的复杂度。