日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 设计模式 示例_Java中的状态设计模式–示例教程

發(fā)布時(shí)間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 设计模式 示例_Java中的状态设计模式–示例教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java 設(shè)計(jì)模式 示例

狀態(tài)模式行為設(shè)計(jì)模式之一 。 當(dāng)對象根據(jù)其內(nèi)部狀態(tài)更改其行為時(shí),將使用狀態(tài)設(shè)計(jì)模式。

如果必須根據(jù)對象的狀態(tài)更改其行為,則可以在對象中使用狀態(tài)變量,并使用if-else條件塊根據(jù)該狀態(tài)執(zhí)行不同的操作。 狀態(tài)模式用于通過上下文狀態(tài)實(shí)現(xiàn)提供一種系統(tǒng)的,耦合耦合的方式來實(shí)現(xiàn)此目的。

上下文是具有對狀態(tài)的具體實(shí)現(xiàn)之一的狀態(tài)引用的狀態(tài),并將請求轉(zhuǎn)發(fā)給狀態(tài)對象以進(jìn)行處理的類。 讓我們用一個(gè)簡單的例子來理解這一點(diǎn)。

假設(shè)我們想用一個(gè)簡單的按鈕實(shí)現(xiàn)電視遙控器來執(zhí)行操作,如果狀態(tài)為ON,則它將打開電視,如果狀態(tài)為OFF,則將關(guān)閉電視。

我們可以使用if-else條件來實(shí)現(xiàn)它,如下所示;

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();}}

請注意,客戶端代碼應(yīng)該知道用于設(shè)置遠(yuǎn)程狀態(tài)的特定值,如果狀態(tài)數(shù)量增加,則實(shí)現(xiàn)和客戶端代碼之間的緊密耦合將很難維護(hù)和擴(kuò)展。

現(xiàn)在我們將使用狀態(tài)模式來實(shí)現(xiàn)上面的電視遙控器示例。

狀態(tài)界面

首先,我們將創(chuàng)建State接口,該接口定義應(yīng)由不同的具體狀態(tài)和上下文類實(shí)現(xiàn)的方法。

package com.journaldev.design.state;public interface State {public void doAction(); }

具體狀態(tài)實(shí)現(xiàn)

在我們的示例中,我們可以有兩種狀態(tài)-一種用于打開電視,另一種用于關(guān)閉電視。 因此,我們將針對這些行為創(chuàng)建兩個(gè)具體的狀態(tài)實(shí)現(xiàn)。

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");}}

現(xiàn)在我們準(zhǔn)備實(shí)現(xiàn)Context對象,該對象將根據(jù)其內(nèi)部狀態(tài)更改其行為。

上下文實(shí)現(xiàn)

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還實(shí)現(xiàn)了State并保留了其當(dāng)前狀態(tài)的引用,并將請求轉(zhuǎn)發(fā)給State的實(shí)現(xiàn)。

測試程序

現(xiàn)在,讓我們編寫一個(gè)簡單的程序,以使用State模式測試我們對TV Remote的實(shí)現(xiàn)。

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的基本實(shí)現(xiàn)相同,沒有使用任何模式。

使用狀態(tài)模式實(shí)現(xiàn)多態(tài)行為的好處是顯而易見的,出錯(cuò)的機(jī)會(huì)更少,并且為其他行為添加更多狀態(tài)非常容易,從而使其更加健壯,易于維護(hù)和靈活。 在這種情況下,狀態(tài)模式還有助于避免if-else或switch-case條件邏輯。

狀態(tài)模式與策略模式非常相似,請查看Java中的策略模式

多數(shù)民眾贊成在Java狀態(tài)模式,我希望你喜歡它。

參考: Java中的狀態(tài)設(shè)計(jì)模式 -JCG合作伙伴 Pankaj Kumar在開發(fā)人員食譜博客上的示例教程 。

翻譯自: https://www.javacodegeeks.com/2013/08/state-design-pattern-in-java-example-tutorial.html

java 設(shè)計(jì)模式 示例

總結(jié)

以上是生活随笔為你收集整理的java 设计模式 示例_Java中的状态设计模式–示例教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。