java 設(shè)計(jì)模式之State(狀態(tài)模式)
java 設(shè)計(jì)模式之State(狀態(tài)模式)
在狀態(tài)模式中,一個(gè)類的行為基于它的狀態(tài)的改變而改變。狀態(tài)模式歸屬于行為型模式。
在下面的實(shí)例中,我們創(chuàng)建了一個(gè)接口State,定義了一個(gè)操作方法,兩個(gè)實(shí)現(xiàn)類StartState和StopState。另外,創(chuàng)建了一個(gè)上下文類Context,這個(gè)類關(guān)聯(lián)到State類。UML類圖如下所示:

//狀態(tài)類
public interface State {
public void doAction(Context context);
}
//實(shí)現(xiàn)類StartState.java
public class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString(){
return "Start State";
}
}
//實(shí)現(xiàn)StopState.java
public class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString(){
return "Stop State";
}
}
//上下文Context.java 實(shí)際運(yùn)用時(shí)可自行更改
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
//測(cè)試類
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}
輸出結(jié)果
Player is in start state Start State Player is in stop state Stop State
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java設(shè)計(jì)模式之狀態(tài)模式State Pattern詳解
- Java設(shè)計(jì)模式之狀態(tài)模式
- 深入理解Java設(shè)計(jì)模式之狀態(tài)模式
- Java設(shè)計(jì)模式之java狀態(tài)模式詳解
- 詳解JAVA 設(shè)計(jì)模式之狀態(tài)模式
- 對(duì)比Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式
- Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹
- Java狀態(tài)設(shè)計(jì)模式實(shí)現(xiàn)對(duì)象狀態(tài)轉(zhuǎn)換的優(yōu)雅方式
相關(guān)文章
java servlet結(jié)合mysql搭建java web開發(fā)環(huán)境
之前寫過一篇 servlet+oracle的文章,但是那是因?yàn)楣居锌赡芙幽敲匆粋€(gè)項(xiàng)目,然后我當(dāng)時(shí)也比較閑,所以隨便學(xué)了下,那玩意是白去研究了,因?yàn)楣竞竺娌]接到那項(xiàng)目。2015-12-12
java輸出1~100之間的全部素?cái)?shù)的5種方式總結(jié)
這篇文章主要介紹了java輸出1~100之間的全部素?cái)?shù)的5種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
spring boot加入攔截器Interceptor過程解析
這篇文章主要介紹了spring boot加入攔截器Interceptor過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
2020最新IDEA SpringBoot整合Dubbo的實(shí)現(xiàn)(zookeeper版)
這篇文章主要介紹了2020最新IDEA SpringBoot整合Dubbo(zookeeper版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
mybatis plus saveOrUpdate實(shí)現(xiàn)有重復(fù)數(shù)據(jù)就更新,否則新增方式
這篇文章主要介紹了mybatis plus saveOrUpdate實(shí)現(xiàn)有重復(fù)數(shù)據(jù)就更新,否則新增方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot異步線程父子線程數(shù)據(jù)傳遞的5種方式
這篇文章主要介紹了SpringBoot異步線程父子線程數(shù)據(jù)傳遞的5種方式,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08
Java Web程序?qū)崿F(xiàn)返回JSON字符串的方法總結(jié)
Java Web服務(wù)器端只要把Java對(duì)象數(shù)據(jù)轉(zhuǎn)成JSON字符串,把JSON字符串以文本的形式通過response輸出即可,2016-05-05

