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

狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

這篇具有很好參考價(jià)值的文章主要介紹了狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概念

??????? 狀態(tài)模式(State Pattern)是一種行為型設(shè)計(jì)模式,用于解決對(duì)象在不同狀態(tài)下的行為問(wèn)題。它允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。狀態(tài)模式主要包含三個(gè)部分:上下文(Context)、狀態(tài)接口(State)和具體狀態(tài)實(shí)現(xiàn)類(ConcreteState)。

組成角色

  1. 狀態(tài)接口(State):定義一個(gè)接口,用于封裝與上下文類的一個(gè)特定狀態(tài)相關(guān)的行為。
  2. 具體狀態(tài)實(shí)現(xiàn)類(ConcreteState):實(shí)現(xiàn)狀態(tài)接口,定義與該狀態(tài)相關(guān)的行為。
  3. 上下文(Context):維護(hù)一個(gè) State 類型的對(duì)象實(shí)例,該實(shí)例定義當(dāng)前的狀態(tài)。

相關(guān)圖示

圖片來(lái)自:https://refactoringguru.cn/design-patterns/state
狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

代碼示例

//狀態(tài)接口
interface State {
    void handle(Context context);
}


//具體狀態(tài)實(shí)現(xiàn)類ConcreteStateA、ConcreteStateB
class ConcreteStateA implements State {
    @Override
    public void handle(Context context) {
        System.out.println("當(dāng)前狀態(tài)是 A.");
      	//設(shè)置下一個(gè)執(zhí)行狀態(tài)節(jié)點(diǎn)
        context.setState(new ConcreteStateB());
    }
}

class ConcreteStateB implements State {
    @Override
    public void handle(Context context) {
        System.out.println("當(dāng)前狀態(tài)是 B.");
      	//設(shè)置下一個(gè)執(zhí)行狀態(tài)節(jié)點(diǎn)
        context.setState(new ConcreteStateA());
    }
}

//上下文對(duì)象
class Context {
  	
  	//當(dāng)前執(zhí)行節(jié)點(diǎn)
    private State state;

    public Context(State state) {
        this.state = state;
    }

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

    public State getState() {
        return state;
    }
		
  	//執(zhí)行節(jié)點(diǎn)邏輯
    public void request() {
        state.handle(this);
    }
}

public class StatePatternDemo {
    public static void main(String[] args) {
        State initialState = new ConcreteStateA();
        Context context = new Context(initialState);
	
		//狀態(tài)節(jié)點(diǎn)流轉(zhuǎn) A -> B -> A			
        context.request(); // 輸出:當(dāng)前狀態(tài)是 A.
        context.request(); // 輸出:當(dāng)前狀態(tài)是 B.
        context.request(); // 輸出:當(dāng)前狀態(tài)是 A.
    }
}

框架中的應(yīng)用

??????? 一個(gè)常見(jiàn)的使用狀態(tài)設(shè)計(jì)模式的例子是Java線程的狀態(tài)管理。Java的Thread類使用了狀態(tài)模式來(lái)表示線程的不同狀態(tài),例如:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED。這些狀態(tài)之間的轉(zhuǎn)換由Thread類和相關(guān)的方法控制。

Thread.State枚舉,它定義了Java線程的各種狀態(tài):

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;
}

線程狀態(tài)之間的轉(zhuǎn)換:

  1. NEW:當(dāng)線程剛創(chuàng)建時(shí),它處于NEW狀態(tài)。在這個(gè)狀態(tài)下,線程還沒(méi)有開(kāi)始執(zhí)行。
  2. RUNNABLE:當(dāng)調(diào)用線程的start()方法后,線程進(jìn)入RUNNABLE狀態(tài)。此時(shí),線程已經(jīng)開(kāi)始執(zhí)行或者準(zhǔn)備執(zhí)行,等待操作系統(tǒng)分配資源。
  3. BLOCKED:當(dāng)線程試圖獲取一個(gè)已被其他線程鎖定的對(duì)象的監(jiān)視器(即進(jìn)入synchronized塊)時(shí),線程進(jìn)入BLOCKED狀態(tài)。一旦鎖被釋放,線程將重新進(jìn)入RUNNABLE狀態(tài)。
  4. WAITING:當(dāng)線程調(diào)用wait()、join()或LockSupport.park()方法時(shí),線程進(jìn)入WAITING狀態(tài)。這表示線程正在等待另一個(gè)線程的通知或中斷。當(dāng)線程收到通知或中斷時(shí),它將重新進(jìn)入RUNNABLE狀態(tài)。
  5. TIMED_WAITING:當(dāng)線程調(diào)用wait(long timeout)、sleep(long millis)、join(long millis)或LockSupport.parkNanos()等方法時(shí),線程進(jìn)入TIMED_WAITING狀態(tài)。這表示線程正在等待另一個(gè)線程的通知、中斷或超時(shí)。當(dāng)線程收到通知、中斷或超時(shí)時(shí),它將重新進(jìn)入RUNNABLE狀態(tài)。
  6. TERMINATED:當(dāng)線程執(zhí)行完成或被中斷時(shí),它進(jìn)入TERMINATED狀態(tài)。在這個(gè)狀態(tài)下,線程已經(jīng)結(jié)束,不能再次啟動(dòng)。

狀態(tài)切換圖

狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

適用場(chǎng)景

  1. 對(duì)象的行為隨其狀態(tài)改變而改變:當(dāng)一個(gè)對(duì)象的行為因其內(nèi)部狀態(tài)而改變時(shí),可以考慮使用狀態(tài)模式。狀態(tài)模式將對(duì)象的狀態(tài)和行為分離,使得狀態(tài)和行為可以獨(dú)立地變化,提高了代碼的靈活性和可維護(hù)性。
  2. 避免大量條件語(yǔ)句:狀態(tài)模式可以減少因狀態(tài)判斷而導(dǎo)致的大量條件語(yǔ)句。通過(guò)使用狀態(tài)模式,可以將狀態(tài)相關(guān)的行為分散到各個(gè)狀態(tài)類中,降低了代碼的復(fù)雜性。
  3. 狀態(tài)轉(zhuǎn)換清晰:當(dāng)一個(gè)對(duì)象的狀態(tài)轉(zhuǎn)換邏輯復(fù)雜且需要明確表示時(shí),狀態(tài)模式可以使?fàn)顟B(tài)轉(zhuǎn)換更加清晰。狀態(tài)模式將狀態(tài)轉(zhuǎn)換邏輯封裝在狀態(tài)類中,有助于理解和維護(hù)狀態(tài)轉(zhuǎn)換邏輯。

以下是一些使用狀態(tài)設(shè)計(jì)模式的實(shí)際場(chǎng)景:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413279.html

  1. 線程狀態(tài)管理:Java線程狀態(tài)管理是狀態(tài)設(shè)計(jì)模式的一個(gè)典型應(yīng)用。線程的狀態(tài)(如新建、運(yùn)行、阻塞等)由Thread.State枚舉表示,狀態(tài)之間的轉(zhuǎn)換由Thread類及其相關(guān)方法控制。
  2. 工作流引擎:工作流引擎通常需要處理多個(gè)狀態(tài)和狀態(tài)之間的轉(zhuǎn)換。狀態(tài)模式可以幫助設(shè)計(jì)一個(gè)靈活的工作流引擎,使得狀態(tài)和行為可以獨(dú)立地變化。
  3. 游戲角色狀態(tài):在游戲開(kāi)發(fā)中,角色可能有多種狀態(tài)(如站立、行走、攻擊等),并且狀態(tài)之間可以相互轉(zhuǎn)換。使用狀態(tài)模式可以使游戲角色的狀態(tài)管理更加清晰。
  4. 訂單狀態(tài)管理:在電商系統(tǒng)中,訂單可能有多個(gè)狀態(tài)(如待付款、待發(fā)貨、已發(fā)貨等),并且狀態(tài)之間有一定的轉(zhuǎn)換邏輯。狀態(tài)模式可以幫助設(shè)計(jì)一個(gè)易于維護(hù)的訂單狀態(tài)管理系統(tǒng)。

到了這里,關(guān)于狀態(tài)設(shè)計(jì)模式(State Pattern)[論點(diǎn):概念、相關(guān)角色、圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]的文章就介紹完了。如果您還想了解更多內(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ì)模式(Builder Design Pattern)[論點(diǎn):概念、圖示、示例、框架中的應(yīng)用、場(chǎng)景]

    生成器設(shè)計(jì)模式(Builder Design Pattern)[論點(diǎn):概念、圖示、示例、框架中的應(yīng)用、場(chǎng)景]

    ??????? 生成器設(shè)計(jì)模式(Builder Design Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,用于處理具有多個(gè)屬性和復(fù)雜構(gòu)造過(guò)程的對(duì)象。生成器模式通過(guò)將對(duì)象的構(gòu)建過(guò)程與其表示分離,使得相同的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。這有助于減少構(gòu)造函數(shù)的參數(shù)個(gè)數(shù),提高代碼的可讀性和可維

    2023年04月11日
    瀏覽(25)
  • 命令設(shè)計(jì)模式(Command Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    命令設(shè)計(jì)模式(Command Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    ??????? 命令設(shè)計(jì)模式 (Command Pattern)是一種行為設(shè)計(jì)模式,它將請(qǐng)求的操作封裝為一個(gè)對(duì)象,從而實(shí)現(xiàn)請(qǐng)求者和執(zhí)行者之間的解耦。這樣,請(qǐng)求者只需要知道如何發(fā)送請(qǐng)求,而無(wú)需關(guān)心請(qǐng)求的具體執(zhí)行過(guò)程。命令模式在很多場(chǎng)景下都非常有用,例如撤銷操作、延遲執(zhí)行、

    2024年02月01日
    瀏覽(25)
  • 觀察者設(shè)計(jì)模式(Observer Design Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    觀察者設(shè)計(jì)模式(Observer Design Pattern)[論點(diǎn):概念、組成角色、相關(guān)圖示、示例代碼、框架中的運(yùn)用、適用場(chǎng)景]

    ??????? 觀察者設(shè)計(jì)模式(Observer Design Pattern)是一種行為型設(shè)計(jì)模式,它定義了一種對(duì)象間的一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,當(dāng)主題對(duì)象狀態(tài)發(fā)生改變時(shí),通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新。 主題(Subject):主題是一個(gè)抽象類或

    2023年04月24日
    瀏覽(25)
  • 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日
    瀏覽(27)
  • 設(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)寫的if else條件情況,且這種條件變化是經(jīng)常變化的,這樣的代碼不易維護(hù)??梢允褂脿顟B(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)
  • 【設(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)編寫程序完成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)
  • 《游戲編程模式》學(xué)習(xí)筆記(七)狀態(tài)模式 State Pattern

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

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

    2024年02月11日
    瀏覽(20)
  • 設(shè)計(jì)模式--工廠模式(Factory Pattern)

    設(shè)計(jì)模式--工廠模式(Factory Pattern)

    工廠模式(Factory Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的接口,但是將對(duì)象的實(shí)例化過(guò)程推遲到子類中。工廠模式允許通過(guò)調(diào)用一個(gè)共同的接口方法來(lái)創(chuàng)建不同類型的對(duì)象,而無(wú)需暴露對(duì)象的實(shí)例化邏輯。 工廠模式的主要目標(biāo)是解耦對(duì)象的創(chuàng)建和使用,以及

    2024年02月10日
    瀏覽(31)
  • 設(shè)計(jì)模式--代理模式(Proxy Pattern)

    設(shè)計(jì)模式--代理模式(Proxy Pattern)

    代理模式(Proxy Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許一個(gè)對(duì)象(代理)充當(dāng)另一個(gè)對(duì)象(真實(shí)對(duì)象)的接口,以控制對(duì)該對(duì)象的訪問(wèn)。代理對(duì)象可以在訪問(wèn)真實(shí)對(duì)象之前或之后執(zhí)行一些操作,從而增強(qiáng)或限制真實(shí)對(duì)象的行為。 代理模式的主要目的是為了控制訪問(wèn),而不是

    2024年02月10日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包