Java 中的模式 --- 簡(jiǎn)單的狀態(tài)模式
狀態(tài)模式很簡(jiǎn)單,無論是理解,還是實(shí)現(xiàn),都很簡(jiǎn)單。一、定義:
1,狀態(tài)模式允許一個(gè)"對(duì)象"在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。
2,狀態(tài)模式的角色:
抽象狀態(tài),具體狀態(tài),環(huán)境(context)角色
狀態(tài)模式的角色比較簡(jiǎn)單,不用解釋了,看名字就能了解。
二、狀態(tài)模式的實(shí)現(xiàn)
1,簡(jiǎn)單實(shí)例
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)典實(shí)現(xiàn)


2

3



4

5

6



7

8

9

10



11

12

13



14

15

Tcp就是狀態(tài)模式的一個(gè)經(jīng)典實(shí)現(xiàn):TcpConnect 他有三個(gè)狀態(tài),TcpEstablished TcpListen TcpClosed
TcpConnect的功能會(huì)跟著狀態(tài)的改變而改變。或是Established,或是Listen,或是Closed
三、狀態(tài)模式的與策略模式,看到上邊的部分,很容易讓人想到策略模式,這兩個(gè)模式有什么區(qū)別呢?如何使用
策略模式:
1,當(dāng)一個(gè)環(huán)境角色選擇了一個(gè)具體的策略,那么在整個(gè)環(huán)境類的生命周期都不會(huì)改變
2,策略模式的環(huán)境自己選擇一個(gè)具體的策略
3,策略模式并不明確告訴客戶端它所選擇的具體策略是什么,對(duì)客戶是黑箱。
狀態(tài)模式:
1,在整個(gè)環(huán)境類的生命周期中會(huì)有明顯的狀態(tài)改變。
2,狀態(tài)模式是被外在原因放入一個(gè)策略
3,狀態(tài)模式明顯的告訴客戶端當(dāng)前的狀態(tài),對(duì)客戶是白箱。
posted on 2006-12-03 11:51 dreamstone 閱讀(3506) 評(píng)論(1) 編輯 收藏 所屬分類: 設(shè)計(jì)模式