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

大話設計模式——17.狀態(tài)模式(State Pattern)

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

簡介

對象的行為依賴于它的狀態(tài)(屬性),可以根據(jù)狀態(tài)的改變而改變相關行為。

UML圖:

大話設計模式——17.狀態(tài)模式(State Pattern),# 行為型,設計模式,狀態(tài)模式,java

應用場景:
  • 對象的行為取決于其狀態(tài),并且必須要在運行時刻根據(jù)狀態(tài)而改變行為
  • 代碼中包含大量與對象狀態(tài)有關的條件語句

示例

上午、下午、晚上工作的狀態(tài)

  1. 上下文對象:
public class Work {

    /**
     * 工作狀態(tài)
     */
    private State state;

    /**
     * 當前時間
     */
    private int hour;


    /**
     * 工作是否完成
     */
    private boolean isFinished;


    public Work() {
        // 初始化操作
        this.state = new MorningState();
    }

    public void writeProgram() {
        state.writeProgram(this);
    }


    public State getState() {
        return state;
    }

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

    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public boolean isFinished() {
        return isFinished;
    }

    public void setFinished(boolean finished) {
        isFinished = finished;
    }
}
  1. 狀態(tài)
public interface State {

    void writeProgram(Work work);
}
public class MorningState implements State {

    @Override
    public void writeProgram(Work work) {
        if (work.getHour() < 12) {
            System.out.println("當前時間:" + work.getHour() + ",干勁十足!");
        } else {
            work.setState(new NoonState());
            work.writeProgram();
        }
    }
}
public class NoonState implements State {

    @Override
    public void writeProgram(Work work) {
        if (work.getHour() < 13) {
            System.out.println("當前時間:" + work.getHour() + ",好餓,開始干飯!");
        } else {
            work.setState(new AfternoonState());
            work.writeProgram();
        }
    }
}
public class AfternoonState implements State {

    @Override
    public void writeProgram(Work work) {
        if (work.getHour() < 18) {
            System.out.println("當前時間:" + work.getHour() + ",開始上班,有點疲憊!");
        } else {
            work.setState(new EveningState());
            work.writeProgram();
        }
    }
}
public class EveningState implements State {

    @Override
    public void writeProgram(Work work) {
        if (!work.isFinished()) {
            System.out.println("當前時間:" + work.getHour() + ",又要加班");
        } else {
            System.out.println("當前時間:" + work.getHour() + ",下班啦!");
        }
    }
}
  1. 運行
public class Main {

    public static void main(String[] args) {
        Work work = new Work();
        // 上午
        work.setHour(9);
        work.writeProgram();

        // 中午
        work.setHour(12);
        work.writeProgram();

        // 下午
        work.setHour(16);
        work.writeProgram();

        // 晚上
        work.setHour(18);
//        work.setFinished(true);
        work.writeProgram();
    }
}

大話設計模式——17.狀態(tài)模式(State Pattern),# 行為型,設計模式,狀態(tài)模式,java文章來源地址http://www.zghlxwxcb.cn/news/detail-850881.html

總結

  • 優(yōu)點
    • 只需改變對象的狀態(tài),就可改變對象的行為
    • 多個環(huán)境對象共享一個狀態(tài)對象,可以減少系統(tǒng)中對象的個數(shù)
  • 缺點
    • 增加系統(tǒng)類和對象的個數(shù)
    • 使用不當將造成程序結構和代碼的混亂
    • 不符合開閉原則,新增狀態(tài)需要修改源碼

VS 策略模式

  • 狀態(tài)模式重在各個狀態(tài)之間的切換從而有不同的行為,策略模式重在根據(jù)具體情況選擇策略不涉及狀態(tài)的切換
  • 狀態(tài)模式不同狀態(tài)做不同的事情且不能相互替換,策略模式解決的都是同一件事

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

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

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

相關文章

  • 狀態(tài)設計模式(State Pattern)[論點:概念、相關角色、圖示、示例代碼、框架中的運用、適用場景]

    狀態(tài)設計模式(State Pattern)[論點:概念、相關角色、圖示、示例代碼、框架中的運用、適用場景]

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

    2023年04月14日
    瀏覽(28)
  • 大話設計模式——18.策略模式(Strategy Pattern)

    大話設計模式——18.策略模式(Strategy Pattern)

    簡介 是一系列算法的封裝,即做的事情相同(方法名稱相同)但是實現(xiàn)的方式不同,以相同方式調用所有的算法,減少算法與使用算法的耦合。直接調用方法。 UML圖 應用場景 Java AWT中的LayoutManager(布局管理器) 系統(tǒng)中存在多個類,它們的區(qū)別僅在于它們的行為 不希望暴露

    2024年04月13日
    瀏覽(21)
  • 大話設計模式——24.迭代器模式(Iterator Pattern)

    大話設計模式——24.迭代器模式(Iterator Pattern)

    簡介 提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部實現(xiàn)。(Java中使用最多的設計模式之一) UML圖 應用場景 Java的集合對象:Collection、List、Map、Set等都有迭代器 Java ArrayList的迭代器源碼 示例 簡單實現(xiàn)集合中的迭代器功能 Iterator: Aggregate: 3.運行

    2024年04月11日
    瀏覽(22)
  • 大話設計模式——9.單例模式(Singleton Pattern)

    大話設計模式——9.單例模式(Singleton Pattern)

    簡介 確保一個類只有一個實例,并提供全局訪問點來獲取該實例,是最簡單的設計模式。 UML圖: 單例模式共有兩種創(chuàng)建方式: 餓漢式(線程安全) 提前創(chuàng)建實例,好處在于該實例全局唯一,不存在線程沖突;壞處在于未使用時也會占用內存資源。 懶漢式(原生寫法存在線

    2024年04月12日
    瀏覽(52)
  • 大話設計模式——2.簡單工廠模式(Simple Factory Pattern)

    大話設計模式——2.簡單工廠模式(Simple Factory Pattern)

    定義:又稱靜態(tài)工廠方法,可以根據(jù)參數(shù)的不同返回不同類的實例,專門定義一個類(工廠類)來負責創(chuàng)建其他類的實例可通過類名直接調用,被創(chuàng)建的實例通常具有共同的父類。 UML圖: 例子: 計算器中的加減乘除,可將不同的運算看成不同的對象,通過工廠類進行構建,

    2024年02月22日
    瀏覽(27)
  • 【設計模式|行為型】命令模式(Command Pattern)

    命令模式(Command Pattern)是一種行為設計模式,它將請求封裝為一個對象,以便在不同的請求者和接收者之間進行解耦、參數(shù)化和操作的隊列化。命令模式允許你將具體的請求封裝為對象,這些對象之間彼此獨立,并且可以用不同的請求對客戶端進行參數(shù)化。 結構 命令接口

    2024年02月15日
    瀏覽(27)
  • 設計模式之狀態(tài)模式(State)的C++實現(xiàn)

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

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

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

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

    2024年02月06日
    瀏覽(18)
  • 行為型設計模式——狀態(tài)模式

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

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

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

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

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

    2024年02月10日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包