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

設(shè)計(jì)模式之:狀態(tài)模式(State Pattern)

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式之:狀態(tài)模式(State Pattern)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

狀態(tài)模式(State Pattern)

狀態(tài)模式是一種行為設(shè)計(jì)模式,允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。這種模式通過(guò)把狀態(tài)的變化邏輯分布到State的子類之間,減少了相互間的依賴,使得狀態(tài)的切換更加清晰。

狀態(tài)模式的關(guān)鍵是將那些會(huì)隨著狀態(tài)改變而改變的行為抽離出來(lái),使得狀態(tài)和行為可以獨(dú)立變化,不同狀態(tài)下的行為可以分別管理和修改,增加新的狀態(tài)或者改變狀態(tài)間的轉(zhuǎn)換邏輯變得更加容易。

使用狀態(tài)模式的好處:
  • 封裝了轉(zhuǎn)換規(guī)則:狀態(tài)之間的轉(zhuǎn)換操作被封裝在狀態(tài)類中,易于修改和擴(kuò)展。
  • 消除了龐大的條件分支語(yǔ)句:狀態(tài)模式通過(guò)多態(tài)性來(lái)消除原本過(guò)多的條件分支語(yǔ)句。
  • 將狀態(tài)的邏輯與對(duì)象的其它行為分離:這有助于集中處理對(duì)象在某一狀態(tài)下的行為。

示例:簡(jiǎn)單的工作狀態(tài)切換

假設(shè)我們有一個(gè)工作任務(wù)(Task)對(duì)象,這個(gè)對(duì)象有幾個(gè)狀態(tài):New(新創(chuàng)建的任務(wù)),InProgress(正在進(jìn)行的任務(wù)),Completed(已完成的任務(wù))。我們可以使用狀態(tài)模式來(lái)設(shè)計(jì)這個(gè)場(chǎng)景。

步驟 1:定義狀態(tài)接口

首先,定義一個(gè)狀態(tài)接口和實(shí)現(xiàn)該接口的具體狀態(tài)類。

interface State {
    void proceed(Task task);
}

class New implements State {
    public void proceed(Task task) {
        System.out.println("Task is starting.");
        task.setState(new InProgress());
    }
}

class InProgress implements State {
    public void proceed(Task task) {
        System.out.println("Task is in progress.");
        task.setState(new Completed());
    }
}

class Completed implements State {
    public void proceed(Task task) {
        System.out.println("Task is already completed.");
    }
}
步驟 2:創(chuàng)建 Context 類

然后,創(chuàng)建包含狀態(tài)的Task類。

class Task {
    private State state;

    public Task() {
        // 任務(wù)默認(rèn)狀態(tài)為 New
        this.state = new New();
    }

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

    public void proceed() {
        state.proceed(this);
    }
}
步驟 3:使用狀態(tài)模式

最后,演示如何使用狀態(tài)模式來(lái)改變Task對(duì)象的狀態(tài)。

public class StatePatternDemo {
    public static void main(String[] args) {
        Task task = new Task();

        task.proceed(); // Task is starting.
        task.proceed(); // Task is in progress.
        task.proceed(); // Task is already completed.
    }
}

在這個(gè)示例中,Task對(duì)象的行為隨著其內(nèi)部狀態(tài)的改變而改變,而且狀態(tài)的變更邏輯被封裝在狀態(tài)對(duì)象內(nèi)部。這樣,如果未來(lái)需要添加新的狀態(tài)或者改變狀態(tài)轉(zhuǎn)換的邏輯,我們只需要修改或添加相應(yīng)的狀態(tài)類,而不需要觸及到Task類的內(nèi)部邏輯,這就是使用狀態(tài)模式的好處。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-831741.html

到了這里,關(guān)于設(shè)計(jì)模式之:狀態(tài)模式(State Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——狀態(tài)模式State(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——狀態(tài)模式State(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    請(qǐng)編寫(xiě)程序完成APP抽獎(jiǎng)活動(dòng)具體要求如下: 假如每參加一次這個(gè)活動(dòng)要扣除用戶50積分,中獎(jiǎng)概率是10% 獎(jiǎng)品數(shù)量固定,抽完就不能抽獎(jiǎng) 活動(dòng)有四個(gè)狀態(tài): 可以抽獎(jiǎng)、不能抽獎(jiǎng)、發(fā)放獎(jiǎng)品和獎(jiǎng)品領(lǐng)完,活動(dòng)的四個(gè)狀態(tài)轉(zhuǎn)換關(guān)系圖如下 一開(kāi)始的狀態(tài)為“不能抽獎(jiǎng)”,當(dāng)扣除50積分

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

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

    允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對(duì)象看起來(lái)似乎修改了它的類。 Context(上下文)定義客戶感興趣的接口;維護(hù)一個(gè)ConcreteState子類的實(shí)例,這個(gè)實(shí)例定義當(dāng)前狀態(tài)。 State(狀態(tài))定義一個(gè)接口以封裝與Context的一個(gè)特定狀態(tài)相關(guān)的行為。 ConcreteState(具體狀態(tài)

    2024年04月26日
    瀏覽(28)
  • 設(shè)計(jì)模式之狀態(tài)模式(State)的C++實(shí)現(xiàn)

    設(shè)計(jì)模式之狀態(tài)模式(State)的C++實(shí)現(xiàn)

    在組件功能開(kāi)發(fā)過(guò)程中,某些對(duì)象的狀態(tài)經(jīng)常面臨變化,不同的狀態(tài),其對(duì)象的操作行為不同。比如根據(jù)狀態(tài)寫(xiě)的if else條件情況,且這種條件變化是經(jīng)常變化的,這樣的代碼不易維護(hù)。可以使用狀態(tài)模式解決這類問(wèn)題。狀態(tài)模式是將狀態(tài)值抽象成一個(gè)基類,將不同狀態(tài)下的操

    2024年02月12日
    瀏覽(28)
  • C++設(shè)計(jì)模式_18_State 狀態(tài)模式

    State和Memento被歸為“狀態(tài)變化”模式。 在組件構(gòu)建過(guò)程中,某些對(duì)象的狀態(tài)經(jīng)常面臨變化,如何對(duì)這些變化進(jìn)行有效的管理?同時(shí)又維持高層模塊的穩(wěn)定?“狀態(tài)變化”模式為這一問(wèn)題提供了一種解決方案。 State Memento

    2024年02月06日
    瀏覽(18)
  • 《游戲編程模式》學(xué)習(xí)筆記(七)狀態(tài)模式 State Pattern

    《游戲編程模式》學(xué)習(xí)筆記(七)狀態(tài)模式 State Pattern

    允許對(duì)象在當(dāng)內(nèi)部狀態(tài)改變時(shí)改變其行為,就好像此對(duì)象改變了自己的類一樣。 在書(shū)的示例里要求你寫(xiě)一個(gè)人物控制器,實(shí)現(xiàn)跳躍功能 直覺(jué)上來(lái)說(shuō),我們代碼會(huì)這么寫(xiě): 可是這么寫(xiě)不對(duì),因?yàn)槿宋锉旧響?yīng)該只能跳一次,這樣寫(xiě)的話人物就可以無(wú)限按B實(shí)現(xiàn)跳躍了。我們加一個(gè)

    2024年02月11日
    瀏覽(20)
  • Java設(shè)計(jì)模式—組合模式(Composite Pattern)

    Java設(shè)計(jì)模式—組合模式(Composite Pattern)

    ????????組合模式(Composite),將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示\\\'部分-整體\\\'的層次結(jié)構(gòu)。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 MenuComponent ?抽象類:定義了菜單組件的基本行為,包括打印名稱和管理子元素的方法。 Menu ?類:表示菜單,可以包含其他

    2024年04月15日
    瀏覽(42)
  • Java設(shè)計(jì)模式之建造者模式詳解(Builder Pattern)

    在日常的開(kāi)發(fā)工作中,我們常常需要?jiǎng)?chuàng)建一些復(fù)雜的對(duì)象。這些對(duì)象可能包含許多不同的屬性,并且這些屬性的初始化過(guò)程可能相當(dāng)復(fù)雜。在這種情況下,建造者模式是一種非常有用的設(shè)計(jì)模式,因?yàn)樗试S我們分步驟地創(chuàng)建復(fù)雜的對(duì)象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    瀏覽(25)
  • Java設(shè)計(jì)模式之過(guò)濾器模式(Filter Pattern)

    過(guò)濾器模式(Filter Pattern)是一種常用的設(shè)計(jì)模式,它用于通過(guò)一系列條件來(lái)過(guò)濾對(duì)象集合,并將滿足條件的對(duì)象保留下來(lái)。該模式可以幫助我們?cè)诓恍薷脑紝?duì)象集合的情況下,根據(jù)特定的條件對(duì)集合進(jìn)行篩選和處理。 在過(guò)濾器模式中,通常有三個(gè)核心角色: 過(guò)濾器接口(

    2024年02月07日
    瀏覽(20)
  • Java設(shè)計(jì)模式-狀態(tài)模式

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

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

    java設(shè)計(jì)模式之狀態(tài)模式

    基本介紹 狀態(tài)模式:它主要是用來(lái)解決對(duì)象在多種狀態(tài)轉(zhuǎn)換時(shí),需要對(duì)外輸出不同的行為的問(wèn)題,狀態(tài)和行為是一一對(duì)應(yīng)的,狀態(tài)之間可以相互轉(zhuǎn)換。 當(dāng)一個(gè)對(duì)象的內(nèi)在狀態(tài)改變時(shí),允許改變其行為,這個(gè)對(duì)象看起來(lái)像是改變了其類。 原理類圖 說(shuō)明: Context 類為環(huán)境角色,

    2024年02月20日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包