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

【設計模式】用Java實現狀態(tài)模式

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

一.狀態(tài)模式介紹與使用場景

狀態(tài)模式是一種行為設計模式,它允許對象在內部狀態(tài)發(fā)生改變時改變其行為。該模式將對象的行為包裝在不同的狀態(tài)類中,使得對象的行為可以根據其當前狀態(tài)動態(tài)改變。

狀態(tài)模式通常由以下幾個角色組成:

  • 環(huán)境類(Context):環(huán)境類是擁有狀態(tài)的對象,它將會根據當前狀態(tài)來執(zhí)行相應的行為。它維護了一個對抽象狀態(tài)類的引用,用于切換和委托不同的狀態(tài)處理。

  • 抽象狀態(tài)類(State):抽象狀態(tài)類定義了一個接口,用于具體狀態(tài)類的實現。在該接口中聲明了具體狀態(tài)類需要實現的方法。

  • 具體狀態(tài)類(Concrete State):具體狀態(tài)類實現了抽象狀態(tài)類的接口,并負責定義該狀態(tài)下的具體行為。它包含了對環(huán)境類的引用,可以根據需要切換環(huán)境類的狀態(tài)。

狀態(tài)模式的核心思想是通過將對象的行為包裝在不同的狀態(tài)類中,使得對象可以根據其當前狀態(tài)來改變行為,而不需要使用大量的條件判斷語句。

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

  • 當一個對象的行為取決于其內部狀態(tài),并且需要在運行時根據狀態(tài)改變行為時,狀態(tài)模式非常有用。它允許對象在不同狀態(tài)下執(zhí)行不同的操作,而不需要使用復雜的條件判斷語句。

  • 當對象具有大量的狀態(tài)以及與每個狀態(tài)相關的行為時,狀態(tài)模式可以提供一種結構化的方式來管理和組織這些狀態(tài)和行為。每個狀態(tài)都可以表示為一個獨立的狀態(tài)類,使得代碼更加清晰、可讀性更高。

  • 當需要向對象的狀態(tài)變化進行動態(tài)擴展時,狀態(tài)模式提供了一種靈活的解決方案。通過添加新的狀態(tài)類,并相應地調整環(huán)境類與狀態(tài)類之間的關聯,可以輕松地增加新的狀態(tài)和行為。

  • 當多個對象需要共享同一組狀態(tài)時,狀態(tài)模式可以減少重復代碼的編寫。通過將狀態(tài)封裝在獨立的狀態(tài)類中,多個對象可以共享相同的狀態(tài)實例,從而節(jié)省內存和代碼維護成本。

總結起來,狀態(tài)模式適用于以下情況:

  • 對象的行為取決于其內部狀態(tài),并且需要在運行時根據狀態(tài)改變行為。
  • 對象具有多個狀態(tài)以及與每個狀態(tài)相關的行為。
  • 需要動態(tài)擴展對象的狀態(tài)和行為。
  • 多個對象需要共享同一組狀態(tài)。

通過使用狀態(tài)模式,可以將復雜的條件判斷邏輯轉化為一組獨立的狀態(tài)類,提高代碼的可讀性、可維護性和可擴展性。同時,狀態(tài)模式也能夠幫助我們將對象的狀態(tài)與行為進行解耦,使得代碼更加靈活和可復用。

二.狀態(tài)模式實現

?下面用一個簡單的demo描述一下狀態(tài)模式:

// 環(huán)境類 - 訂單
class Order {
    private OrderState state;

    public Order() {
        state = new NewState();
    }

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

    public void process() {
        state.processOrder(this);
    }
}

// 抽象狀態(tài)類
interface OrderState {
    void processOrder(Order order);
}

// 具體狀態(tài)類 - 新訂單
class NewState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing new order");
        // 在新訂單狀態(tài)下的處理邏輯
        // ...
        order.setState(new ShippedState()); // 切換狀態(tài)
    }
}

// 具體狀態(tài)類 - 已發(fā)貨訂單
class ShippedState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing shipped order");
        // 在已發(fā)貨訂單狀態(tài)下的處理邏輯
        // ...
        order.setState(new DeliveredState()); // 切換狀態(tài)
    }
}

// 具體狀態(tài)類 - 已交付訂單
class DeliveredState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing delivered order");
        // 在已交付訂單狀態(tài)下的處理邏輯
        // ...
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Order order = new Order();

        order.process(); // 處理新訂單
        order.process(); // 處理已發(fā)貨訂單
        order.process(); // 處理已交付訂單
    }
}

我們模擬了一個訂單的狀態(tài)變化過程。訂單類 Order 是擁有狀態(tài)的對象,它將根據當前狀態(tài)來執(zhí)行相應的行為。

抽象狀態(tài)類 OrderState 定義了一個接口 processOrder(),具體狀態(tài)類 NewState、ShippedState DeliveredState 實現了該接口,并分別負責定義相應狀態(tài)下的具體行為。

Main 類的 main 方法中,我們創(chuàng)建了一個訂單對象,并連續(xù)調用了 process() 方法來處理訂單。初始狀態(tài)為新訂單狀態(tài),調用 process() 方法后會切換到已發(fā)貨訂單狀態(tài),再次調用 process() 方法后會切換到已交付訂單狀態(tài)。

通過使用狀態(tài)模式,訂單對象能夠根據不同的狀態(tài)來改變其行為,避免了大量的條件判斷語句,并使得代碼更加可擴展和易維護。

以上只是一個簡單的實現demo,實際開發(fā)中,還有很多場景適用于狀態(tài)模式,例如電商訂單的狀態(tài)流轉,下面我們寫一個實現電商訂單狀態(tài)流轉的狀態(tài)模式例子:

// 環(huán)境類 - 訂單
class Order {
    private OrderState state;

    public Order() {
        state = new NewState();
    }

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

    public void process() {
        state.processOrder(this);
    }
    
    public void cancel() {
        state.cancelOrder(this);
    }
}

// 抽象狀態(tài)類
interface OrderState {
    void processOrder(Order order);
    void cancelOrder(Order order);
}

// 具體狀態(tài)類 - 新訂單
class NewState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing new order");
        // 在新訂單狀態(tài)下的處理邏輯
        // ...
        order.setState(new ShippedState()); // 切換狀態(tài)
    }

    public void cancelOrder(Order order) {
        System.out.println("Cancelling new order");
        // 在新訂單狀態(tài)下的取消邏輯
        // ...
        order.setState(new CancelledState()); // 切換狀態(tài)
    }
}

// 具體狀態(tài)類 - 已發(fā)貨訂單
class ShippedState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing shipped order");
        // 在已發(fā)貨訂單狀態(tài)下的處理邏輯
        // ...
        order.setState(new DeliveredState()); // 切換狀態(tài)
    }

    public void cancelOrder(Order order) {
        System.out.println("Cancelling shipped order");
        // 在已發(fā)貨訂單狀態(tài)下的取消邏輯
        // ...
        order.setState(new CancelledState()); // 切換狀態(tài)
    }
}

// 具體狀態(tài)類 - 已交付訂單
class DeliveredState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Processing delivered order");
        // 在已交付訂單狀態(tài)下的處理邏輯
        // ...
    }

    public void cancelOrder(Order order) {
        System.out.println("Cancelling delivered order");
        // 在已交付訂單狀態(tài)下的取消邏輯
        // ...
        order.setState(new CancelledState()); // 切換狀態(tài)
    }
}

// 具體狀態(tài)類 - 取消訂單
class CancelledState implements OrderState {
    public void processOrder(Order order) {
        System.out.println("Cannot process cancelled order");
        // 取消訂單狀態(tài)下不執(zhí)行任何處理邏輯
    }

    public void cancelOrder(Order order) {
        System.out.println("Cannot cancel already cancelled order");
        // 取消訂單狀態(tài)下不執(zhí)行任何取消邏輯
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Order order = new Order();

        order.process(); // 處理新訂單
        order.process(); // 處理已發(fā)貨訂單
        order.cancel(); // 取消已發(fā)貨訂單
        order.process(); // 處理已交付訂單
    }
}

上述示例中,我們模擬了一個電商系統(tǒng)中的訂單狀態(tài)變化過程。訂單類 Order 是擁有狀態(tài)的對象,它根據當前狀態(tài)來執(zhí)行相應的操作。

抽象狀態(tài)類 OrderState 定義了兩個方法 processOrder() cancelOrder(),具體狀態(tài)類 NewState、ShippedState、DeliveredState CancelledState 實現了該接口,并分別負責定義相應狀態(tài)下的具體行為。

Main 類的 main 方法中,我們創(chuàng)建了一個訂單對象,并通過連續(xù)調用 process() 方法和 cancel() 方法來模擬訂單狀態(tài)的變化。初始狀態(tài)為新訂單狀態(tài),調用 process() 方法后會切換到已發(fā)貨訂單狀態(tài),再次調用 cancel() 方法后會切換到取消訂單狀態(tài),最后再次調用 process() 方法會輸出無法處理已取消訂單的提示信息。

通過使用狀態(tài)模式,訂單對象能夠根據不同的狀態(tài)來改變其行為,避免了大量的條件判斷語句,并使得代碼更加可擴展和易維護。狀態(tài)模式也能夠幫助我們將對象的狀態(tài)與行為進行解耦,使得代碼更加靈活和可復用。文章來源地址http://www.zghlxwxcb.cn/news/detail-695552.html

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

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

領支付寶紅包贊助服務器費用

相關文章

  • 【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【學習難度:★★★☆☆,使用頻率:★★★☆☆】 在很多情況下,一個對象的行為取決于一個或多個動態(tài)變化的屬性,這樣的屬性叫做狀態(tài),這樣的對象叫做有狀態(tài)的(stateful)對象,這樣的對象狀態(tài)是從事先定義好的一系列值中取出的。當一個這樣的對象與外部事件產生互

    2024年02月07日
    瀏覽(16)
  • 【Java 設計模式】行為型之狀態(tài)模式

    狀態(tài)模式(State Pattern)是一種行為型設計模式,用于通過將對象的行為封裝到不同的狀態(tài)類中,使得對象在不同的狀態(tài)下具有不同的行為。狀態(tài)模式允許對象在內部狀態(tài)發(fā)生改變時改變其行為,而無需修改其代碼。在本文中,我們將深入研究Java中狀態(tài)模式的定義、結構、使

    2024年01月24日
    瀏覽(24)
  • Java設計模式之行為型-狀態(tài)模式(UML類圖+案例分析)

    Java設計模式之行為型-狀態(tài)模式(UML類圖+案例分析)

    目錄 一、基礎概念 二、UML類圖 三、角色設計 四、案例分析 五、總結 狀態(tài)模式允許一個對象在其內部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類,狀態(tài)模式主要解決的是當控制一個對象狀態(tài)轉換的條件表達式過于復雜時的情況,把狀態(tài)的判斷邏輯轉移到表示不

    2024年02月16日
    瀏覽(20)
  • 設計模式之責任鏈模式【Java實現】

    設計模式之責任鏈模式【Java實現】

    責任鏈(chain of Resposibility) 模式:為了避免請求發(fā)送者與多個請求處理者耦合在一起,于是將所有請求的處理者 通過前一對象記住其下一個對象的引用而連成一條鏈 ;當有請求發(fā)生時,可將請求沿著這條鏈傳遞,直到有對象處理它位置。屬于對象行為型模式。 抽象處理者

    2024年02月12日
    瀏覽(21)
  • 設計模式-簡單工廠模式(靜態(tài)工廠模式)java實現

    設計模式-簡單工廠模式(靜態(tài)工廠模式)java實現

    簡單工廠模式根據所 提供的參數 數據返回幾個可能類中的一個類的實例。通常返回的類都有一個公共的父類和公共的方法。 ? 意圖 提供一個類,負責根據一定的條件創(chuàng)建某一具體類的實例。同時使用工廠模式也是為了隱藏創(chuàng)建對象的過程 角色及其職責 (1)工廠(Creator)角色

    2024年02月13日
    瀏覽(29)
  • Java設計模式-策略模式-基于Spring實現

    Java設計模式-策略模式-基于Spring實現

    策略模式是一種行為設計模式,它允許在運行時選擇算法的行為。它將算法封裝在 獨立的策略類 中,使得它們可以相互替換,而不影響客戶端代碼。這種模式通過 將算法的選擇從客戶端代碼中分離出來 ,提供了更大的靈活性和可維護性。 在Java中,策略模式的設計理念可以

    2024年02月08日
    瀏覽(26)
  • Java設計模式-觀察者模式-SpringBoot實現

    Java設計模式-觀察者模式-SpringBoot實現

    項目:https://gitee.com/KakarottoChen/blog-code.git 的:JavaSpringListener Java觀察者模式是一種設計模式,用于實現對象之間的一對多依賴關系。在觀察者模式中,當一個對象的狀態(tài)發(fā)生變化時,它的所有依賴對象(觀察者)都會自動收到通知并進行相應的更新。 觀察者模式由以下幾個核

    2024年02月08日
    瀏覽(89)
  • 【設計模式】23種設計模式——單例模式(原理講解+應用場景介紹+案例介紹+Java代碼實現)

    【設計模式】23種設計模式——單例模式(原理講解+應用場景介紹+案例介紹+Java代碼實現)

    介紹 所謂類的單例設計模式,就是采取一定的方法, 保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例 ,并且該類只提供一個取得其對象實例的方法(靜態(tài)方法)。 比如Hibernate的SessionFactory,它充當數據存儲源的代理,并負責創(chuàng)建Session對象。SessionFactory并不是輕量

    2024年02月13日
    瀏覽(32)
  • Unity實現設計模式——狀態(tài)模式

    Unity實現設計模式——狀態(tài)模式

    狀態(tài)模式最核心的設計思路就是將對象的狀態(tài)抽象出一個接口,然后根據它的不同狀態(tài)封裝其行為,這樣就可以實現狀態(tài)和行為的綁定,最終實現對象和狀態(tài)的有效解耦。 在實際開發(fā)中一般用到FSM有限狀態(tài)機的實現,GF框架中的FSM和流程控制就是基于這個原理實現的。 狀態(tài)

    2024年02月08日
    瀏覽(20)
  • 【設計模式】簡易俄羅斯轉盤實現JAVA

    【設計模式】簡易俄羅斯轉盤實現JAVA

    大家好哇,我是夢辛工作室的靈,最近有些無聊,沒得什么事情做,所以想再熟悉熟悉設計模式吧,然后就寫了個俄羅斯轉盤玩,還是老樣子先看結果: 看上去還是不錯的吧,最后那個只是打印,不會真的刪除,別被嚇到了,哈哈哈,下面直接 上代碼 TestPlayGame PlayGame PlayG

    2024年02月16日
    瀏覽(6)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包