狀態(tài)模式很簡單,無論是理解,還是實現(xiàn),都很簡單。
一、定義:
1,狀態(tài)模式允許一個"對象"在其內(nèi)部狀態(tài)改變的時候改變其行為。
2,狀態(tài)模式的角色:
抽象狀態(tài),具體狀態(tài),環(huán)境(context)角色
狀態(tài)模式的角色比較簡單,不用解釋了,看名字就能了解。
二、狀態(tài)模式的實現(xiàn)
1,簡單實例
1
public class Context
{
2
private State state;
3
public void sampleOperation()
{
4
state.sampleOperation();
5
}
6
public void setState(State state)
{
7
this.state = state;
8
}
9
}
10
public interface State
{
11
void sampleOperation();
12
}
13
public class ConcreteState implements State
{
14
public void sampleOperation();
15
}
2、狀態(tài)模式的經(jīng)典實現(xiàn)
Tcp就是狀態(tài)模式的一個經(jīng)典實現(xiàn):TcpConnect 他有三個狀態(tài),TcpEstablished TcpListen TcpClosed
TcpConnect的功能會跟著狀態(tài)的改變而改變?;蚴荅stablished,或是Listen,或是Closed
三、狀態(tài)模式的與策略模式,看到上邊的部分,很容易讓人想到策略模式,這兩個模式有什么區(qū)別呢?如何使用
策略模式:
1,當一個環(huán)境角色選擇了一個具體的策略,那么在整個環(huán)境類的生命周期都不會改變
2,策略模式的環(huán)境自己選擇一個具體的策略
3,策略模式并不明確告訴客戶端它所選擇的具體策略是什么,對客戶是黑箱。
狀態(tài)模式:
1,在整個環(huán)境類的生命周期中會有明顯的狀態(tài)改變。
2,狀態(tài)模式是被外在原因放入一個策略
3,狀態(tài)模式明顯的告訴客戶端當前的狀態(tài),對客戶是白箱。