国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《設(shè)計模式》狀態(tài)模式

這篇具有很好參考價值的文章主要介紹了《設(shè)計模式》狀態(tài)模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

定義

  • 狀態(tài)模式也稱為狀態(tài)機(jī)模式,允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變它的行為,對象看起來好像修改了它的類。
  • 屬于行為型模式。

狀態(tài)模式的角色組成

  • State(抽象狀態(tài)類):定義一個接口用來封裝與環(huán)境類的一個特定狀態(tài)相關(guān)的行為,可以有一個或多個行為。
  • ConcreteState(具體狀態(tài)類):作為抽象狀態(tài)類的子類,每個子類實現(xiàn)一個與環(huán)境類的一個狀態(tài)相關(guān)的行為。每個具體狀態(tài)類對應(yīng)環(huán)境類的一個具體狀態(tài),不同的具體狀態(tài)類其行為有所不同。
  • Context(環(huán)境類):環(huán)境類中維護(hù)一個具體狀態(tài)的實例,通常有多種狀態(tài),負(fù)責(zé)具體狀態(tài)的切換。

狀態(tài)模式的 UML 類圖

《設(shè)計模式》狀態(tài)模式

??情景案例:CSDN 博客平臺的內(nèi)容管理模塊對文章進(jìn)行了統(tǒng)一管理,目前文章的狀態(tài)分為“全部”、“全部可見”、“僅我可見”、“審核”、“草稿箱”和“回收站”這六種狀態(tài)。不同狀態(tài)文章的“行為”是不同的,例如,“全部”表示可以看到其他五種狀態(tài)文章的合集,“全部可見”表示可以看到全部已經(jīng)發(fā)表的設(shè)置設(shè)為公開的文章,“僅我可見”表示只能看到已經(jīng)發(fā)布的私密文章,使用狀態(tài)模式對該情景進(jìn)行模擬編碼。

抽象狀態(tài)類 State

public interface State {
    void handle();
}

具體狀態(tài)類 All

public class All implements State{
    @Override
    public void handle() {
        System.out.println("所有文章,包括所有公開文章、私密文章、審核文章、草稿文章、已經(jīng)被刪除的文章");
    }
}

具體狀態(tài)類 AllVisible

public class AllVisible implements State{
    @Override
    public void handle() {
        System.out.println("所有公開文章");
    }
}

具體狀態(tài)類 Private

public class Private implements State{
    @Override
    public void handle() {
        System.out.println("所有私密文章");
    }
}

具體狀態(tài)類 Audit

public class Audit implements State{
    @Override
    public void handle() {
        System.out.println("所有審核文章");
    }
}

具體狀態(tài)類 Manuscript

public class Manuscript implements State {
    @Override
    public void handle() {
        System.out.println("所有草稿文章");
    }
}

具體狀態(tài)類 Recycled

public class Recycled implements State{
    @Override
    public void handle() {
        System.out.println("所有已經(jīng)被刪除的文章");
    }
}

環(huán)境類 Context

public class Context {
    private State state;

    public void setState(State state) {
        this.state = state;
    }

    void request() {
        this.state.handle();
    }
}

客戶端類 Client

public class Client {
    public static void main(String[] args) {
        Context context = new Context();
        context.setState(new All());
        context.request();
        context.setState(new AllVisible());
        context.request();
        context.setState(new Private());
        context.request();
    }
}

狀態(tài)模式的優(yōu)點

  • 消除龐大的條件分支語句:將特定的狀態(tài)獨立為類,消除了冗余的 if...elseswitch...case 語句,使代碼更加簡潔,提高了系統(tǒng)的可維護(hù)性。
  • 狀態(tài)轉(zhuǎn)換顯式化:將特定的狀態(tài)相關(guān)的行為都放入一個對象中,由于所有與狀態(tài)相關(guān)的代碼都存在于某個ConcreteState中,所以通過定義新的子類可以很容易地增加新的狀態(tài)和轉(zhuǎn)換。

狀態(tài)模式的缺點

  • 類膨脹問題:如果一個事物具備很多狀態(tài),則會造成狀態(tài)類太多。

狀態(tài)模式的適用場景

  • 一個操作中含有龐大的多分支結(jié)構(gòu),并且這些分支取決于對象的狀態(tài)。
  • 對象的行為依賴于它的狀態(tài)(例如某些屬性值),狀態(tài)的改變將導(dǎo)致行為的變化。

??狀態(tài)模式在 JDK 或 Spring 源碼中的應(yīng)用

很遺憾哈哈,目前無論是在 JDK 還是在 Spring 源碼中,具體實現(xiàn)了狀態(tài)模式的類和接口并不常見(也就是沒有哈哈),因為狀態(tài)模式并非是JDK 或 Spring 框架中廣泛采用的設(shè)計模式之一。雖然可能沒有明確稱之為"狀態(tài)模式",但是可以找到一些與狀態(tài)模式相似的設(shè)計。例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-451879.html

  • ThreadPoolExecutor 類是 Java 并發(fā)庫中用于執(zhí)行多個線程任務(wù)的線程池實現(xiàn)之一。它內(nèi)部維護(hù)了線程池的狀態(tài),如 RUNNING、SHUTDOWN、STOP、TIDYING 和 TERMINATED 等。根據(jù)不同的狀態(tài),ThreadPoolExecutor 會在處理任務(wù)、關(guān)閉線程池等過程中執(zhí)行不同的行為,從而實現(xiàn)了一種狀態(tài)切換的邏輯。
  • 該示例只是在某種程度上與狀態(tài)模式相似,而不是典型的狀態(tài)模式應(yīng)用。

到了這里,關(guān)于《設(shè)計模式》狀態(tài)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【設(shè)計模式】訂單狀態(tài)流傳中的狀態(tài)機(jī)與狀態(tài)模式

    【設(shè)計模式】訂單狀態(tài)流傳中的狀態(tài)機(jī)與狀態(tài)模式

    狀態(tài)模式一般是用在對象內(nèi)部的 狀態(tài)流轉(zhuǎn) 場景中,用來實現(xiàn) 狀態(tài)機(jī) 。 什么是狀態(tài)機(jī)呢? 狀態(tài)機(jī)是對狀態(tài)轉(zhuǎn)移的抽象,由 事件 、 狀態(tài) 、 動作 組成,事件有時候也被稱為 轉(zhuǎn)移事件 或者 轉(zhuǎn)移 ,當(dāng)事件觸發(fā)時,可以將狀態(tài)由一個狀態(tài)變更為另一個狀態(tài),并執(zhí)行動作。其中,

    2024年02月12日
    瀏覽(25)
  • 行為型設(shè)計模式——狀態(tài)模式

    行為型設(shè)計模式——狀態(tài)模式

    狀態(tài)模式是比較簡單的設(shè)計模式,它的主要作用是減少代碼中大量的 if-else 或者 switch-case 等邏輯判斷(俗稱屎山)。它將每個狀態(tài)定義為一個類,而每個狀態(tài)類有自己對應(yīng)的方法,因此當(dāng)需要根據(jù)狀態(tài)執(zhí)行邏輯代碼時不需要寫大量的if-else判斷是哪個狀態(tài)然后執(zhí)行對應(yīng)的邏輯

    2024年02月02日
    瀏覽(30)
  • 設(shè)計模式行為型-狀態(tài)模式

    設(shè)計模式行為型-狀態(tài)模式

    狀態(tài)模式是一種行為型設(shè)計模式,用于處理對象在不同狀態(tài)下的行為變化。它將對象的行為封裝在不同狀態(tài)類中,通過狀態(tài)的切換實現(xiàn)不同行為的觸發(fā)。 本文將介紹狀態(tài)模式的基本概念、應(yīng)用場景以及優(yōu)勢與適用性。 實現(xiàn)具體狀態(tài)類 具體工作類: 上下文類包含狀態(tài)對象的引

    2024年02月10日
    瀏覽(25)
  • Java設(shè)計模式-狀態(tài)模式

    在軟件開發(fā)領(lǐng)域,設(shè)計模式是一組經(jīng)過驗證的、被廣泛接受的解決問題的方案。其中之一是狀態(tài)模式,它提供了一種優(yōu)雅的方式來管理對象的不同狀態(tài)。 狀態(tài)模式是一種行為型設(shè)計模式,它允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變其行為。狀態(tài)模式將對象的行為封裝在不同的狀態(tài)

    2024年02月06日
    瀏覽(25)
  • 設(shè)計模式之狀態(tài)模式(下)

    設(shè)計模式之狀態(tài)模式(下)

    3)共享狀態(tài) 1.概述 在某些情況下,多個環(huán)境對象可能需要共享同一個狀態(tài),如果希望在系統(tǒng)中實現(xiàn)多個環(huán)境對象共享一個或多個狀態(tài)對象,那么需要將這些狀態(tài)對象定義為環(huán)境類的靜態(tài)成員對象。 2.案例 背景 :要求兩個開關(guān)對象要么都處于開的狀態(tài),要么都處于關(guān)的狀態(tài),

    2024年04月25日
    瀏覽(23)
  • 設(shè)計模式淺析(十一) ·狀態(tài)模式

    設(shè)計模式淺析(十一) ·狀態(tài)模式

    日常叨逼叨 java設(shè)計模式淺析,如果覺得對你有幫助,記得一鍵三連,謝謝各位觀眾老爺???? 狀態(tài)模式 概念 狀態(tài)模式 Java中的狀態(tài)模式(State Pattern)是一種行為型設(shè)計模式,它允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,看起來就像修改了它的類一樣。狀態(tài)模式的核心

    2024年04月12日
    瀏覽(19)
  • 設(shè)計模式行為型——狀態(tài)模式

    設(shè)計模式行為型——狀態(tài)模式

    ? 目錄 狀態(tài)模式的定義 狀態(tài)模式的實現(xiàn) 狀態(tài)模式角色 狀態(tài)模式類圖 狀態(tài)模式舉例 狀態(tài)模式代碼實現(xiàn) 狀態(tài)模式的特點 優(yōu)點 缺點 使用場景 注意事項 實際應(yīng)用 ? ? ? ?在軟件開發(fā)過程中,應(yīng)用程序中的部分對象可能會根據(jù)不同的情況做出不同的行為,把這種對象稱為有狀態(tài)

    2024年02月14日
    瀏覽(24)
  • 設(shè)計模式再探——狀態(tài)模式

    設(shè)計模式再探——狀態(tài)模式

    最近產(chǎn)品中有這樣的業(yè)務(wù)需求,不同時間(這里不是活動的執(zhí)行時間,而是活動的執(zhí)行時刻)展示不同的活動; 要求還是需要后續(xù)會由N種活動擴(kuò)充進(jìn)來,并且擴(kuò)充的時候還得達(dá)到復(fù)用之前活動中的一些屬性和方法。 結(jié)合這樣的需求,再探狀態(tài)模式,豁然開朗,于是乎總結(jié)分享

    2024年02月16日
    瀏覽(15)
  • 設(shè)計模式之狀態(tài)模式筆記

    設(shè)計模式之狀態(tài)模式筆記

    記錄下學(xué)習(xí)設(shè)計模式-狀態(tài)模式的寫法。JDK使用版本為1.8版本。 意圖 :允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。 結(jié)構(gòu) : 其中: Context(上下文)定義客戶感興趣的接口;維護(hù)一個ConcreteState子類的實例,這個實例定義當(dāng)前狀態(tài)。 State(狀態(tài))定義一個接口以封裝與Context的一個

    2024年02月10日
    瀏覽(26)
  • 【前端設(shè)計模式】之狀態(tài)模式

    在前端開發(fā)中,我們經(jīng)常需要處理復(fù)雜的應(yīng)用狀態(tài)。這時候,狀態(tài)模式就能派上用場了。狀態(tài)模式允許我們根據(jù)不同的狀態(tài)來改變對象的行為,從而實現(xiàn)優(yōu)雅地管理應(yīng)用狀態(tài)。 狀態(tài)模式具有以下特性: 狀態(tài)(State):定義了對象在特定條件下所處的行為和屬性。 上下文(C

    2024年01月20日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包