Java中的状态设计模式–示例教程
狀態模式是行為設計模式之一 。 當對象根據其內部狀態更改其行為時,將使用狀態設計模式。
如果必須根據對象的狀態更改其行為,則可以在對象中使用狀態變量,并使用if-else條件塊根據狀態執行不同的操作。 狀態模式用于通過上下文和狀態實現提供一種系統的,耦合耦合的方式來實現此目的。
上下文是具有對狀態的具體實現之一的狀態引用的狀態,并將請求轉發給狀態對象以進行處理的類。 讓我們用一個簡單的例子來理解這一點。
假設我們想用一個簡單的按鈕實現電視遙控器來執行操作,如果狀態為ON,則將打開電視,如果狀態為OFF,則將關閉電視。
我們可以使用if-else條件來實現它,如下所示;
package com.journaldev.design.state;public class TVRemoteBasic {private String state="";public void setState(String state){this.state=state;}public void doAction(){if(state.equalsIgnoreCase("ON")){System.out.println("TV is turned ON");}else if(state.equalsIgnoreCase("OFF")){System.out.println("TV is turned OFF");}}public static void main(String args[]){TVRemoteBasic remote = new TVRemoteBasic();remote.setState("ON");remote.doAction();remote.setState("OFF");remote.doAction();}}請注意,客戶端代碼應該知道用于設置遠程狀態的特定值,如果狀態數量增加,則實現和客戶端代碼之間的緊密耦合將很難維護和擴展。
現在我們將使用狀態模式來實現上面的電視遙控器示例。
狀態界面
首先,我們將創建狀態接口,該接口定義應由不同的具體狀態和上下文類實現的方法。
package com.journaldev.design.state;public interface State {public void doAction(); }具體狀態實現
在我們的示例中,我們可以有兩種狀態-一種用于打開電視,另一種用于關閉電視。 因此,我們將針對這些行為創建兩個具體的狀態實現。
package com.journaldev.design.state;public class TVStartState implements State {@Overridepublic void doAction() {System.out.println("TV is turned ON");}}package com.journaldev.design.state;public class TVStopState implements State {@Overridepublic void doAction() {System.out.println("TV is turned OFF");}}現在,我們準備實現Context對象,該對象將根據其內部狀態更改其行為。
上下文實現
package com.journaldev.design.state;public class TVContext implements State {private State tvState;public void setState(State state) {this.tvState=state;}public State getState() {return this.tvState;}@Overridepublic void doAction() {this.tvState.doAction();}}請注意,Context還實現State并保留其當前狀態的引用,并將請求轉發給State實現。
測試程序
現在,讓我們編寫一個簡單的程序,以使用State模式測試我們對TV Remote的實現。
package com.journaldev.design.state;public class TVRemote {public static void main(String[] args) {TVContext context = new TVContext();State tvStartState = new TVStartState();State tvStopState = new TVStopState();context.setState(tvStartState);context.doAction();context.setState(tvStopState);context.doAction();}}以上程序的輸出與TV Remote的基本實現相同,沒有使用任何模式。
使用狀態模式實現多態行為的好處是顯而易見的,出錯的機會更少,并且為其他行為添加更多狀態非常容易,從而使其更加健壯,易于維護和靈活。 在這種情況下,狀態模式還有助于避免if-else或switch-case條件邏輯。
狀態模式與策略模式非常相似,請查看Java中的策略模式 。
多數民眾贊成在Java狀態模式,我希望你喜歡它。
翻譯自: https://www.javacodegeeks.com/2013/08/state-design-pattern-in-java-example-tutorial.html
總結
以上是生活随笔為你收集整理的Java中的状态设计模式–示例教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安徽房产备案网上查询(安徽房产备案)
- 下一篇: 安卓证书安装在哪里(安卓证书安装)