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

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

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

1、狀態(tài)模式的提出

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

2、需求描述

一年有不同節(jié)日,不同的節(jié)日穿不同的衣服,吃不同的食物。節(jié)日可能會隨著人們的生活習(xí)俗不斷地增加。設(shè)計一個根據(jù)不同地節(jié)日,返回對應(yīng)穿著和食物方面的功能代碼。

3、狀態(tài)模式的代碼實現(xiàn)

(1)UML圖如下:

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

(2)代碼實現(xiàn)如下:

#include <iostream>
class AbsFestival
{
public:
    virtual ~AbsFestival(){};
    virtual void Eat()=0;
    virtual void Wear()=0;
};

class FestivalA:public AbsFestival
{
public:
    static FestivalA* getInstance()
    {
        static FestivalA obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalA Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalA Wear" << std::endl;
    };
};

class FestivalB:public AbsFestival
{
public:
    static FestivalB* getInstance()
    {
        static FestivalB obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalB Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalB Wear" << std::endl;
    };
};

class FestivalC:public AbsFestival
{
public:
    static FestivalC* getInstance()
    {
        static FestivalC obj;
        return &obj;
    };
    virtual void Eat()override
    {
        std::cout << "FestivalC Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalC Wear" << std::endl;
    };
};

class FestivalD:public AbsFestival
{
public:
    virtual void Eat()override
    {
        std::cout << "FestivalD Eat" << std::endl;
    }
    virtual void Wear()override
    {
        std::cout << "FestivalD Wear" << std::endl;
    };
};

class Client
{
protected:
    AbsFestival *time;
public:
    void SetTime(AbsFestival* p)
    {
        time = p;
    }
    void DoWork()
    {
        time->Eat();
        time->Wear();
    }
};

int main()
{
    Client useObj;

    FestivalA festivalA;
    useObj.SetTime(festivalA.getInstance());
    useObj.DoWork();

    FestivalB festivalB;
    useObj.SetTime(festivalB.getInstance());
    useObj.DoWork();

    FestivalC festivalC;
    useObj.SetTime(festivalC.getInstance());
    useObj.DoWork();

    FestivalD* festivalD = new FestivalD();
    useObj.SetTime(festivalD);
    useObj.DoWork();

    delete festivalD;
    festivalD = nullptr;
    return 0;
}

?程序運行結(jié)果如下:

設(shè)計模式之狀態(tài)模式(State)的C++實現(xiàn),設(shè)計模式,設(shè)計模式,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-660066.html

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

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

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

相關(guān)文章

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

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

    簡介 對象的行為依賴于它的狀態(tài)(屬性),可以根據(jù)狀態(tài)的改變而改變相關(guān)行為。 UML圖: 應(yīng)用場景: 對象的行為取決于其狀態(tài),并且必須要在運行時刻根據(jù)狀態(tài)而改變行為 代碼中包含大量與對象狀態(tài)有關(guān)的條件語句 示例 上午、下午、晚上工作的狀態(tài) 上下文對象: 狀態(tài)

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

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

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

    2024年04月26日
    瀏覽(28)
  • 設(shè)計模式二十一:狀態(tài)模式(State Pattern)

    一個對象的內(nèi)部狀態(tài)發(fā)生變化時,允許對象改變其行為。這種模式使得一個對象看起來好像在運行時改變了它的類,主要目的是將狀態(tài)的行為從主要對象中分離出來,使得主要對象不必包含所有狀態(tài)的邏輯,而是將每個狀態(tài)的行為封裝在獨立的類中。這有助于減少代碼的重復(fù)

    2024年02月11日
    瀏覽(18)
  • 狀態(tài)設(shè)計模式(State Pattern)[論點:概念、相關(guān)角色、圖示、示例代碼、框架中的運用、適用場景]

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

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

    2023年04月14日
    瀏覽(28)
  • C++設(shè)計模式之狀態(tài)模式

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

    【聲明】本題目來源于卡碼網(wǎng)(卡碼網(wǎng)KamaCoder) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到 C++編碼部分 】 ? ? ? ? --什么是狀態(tài)模式(第20種設(shè)計模式) ???????? 狀態(tài)模式 (State Pattern)是?種 行為型設(shè)計模式 ,它適?于?個對象在不同的狀態(tài)下有不同的行為時,

    2024年01月25日
    瀏覽(15)
  • C++設(shè)計模式20:狀態(tài)模式

    C++ 23種設(shè)計模式系列文章目錄 創(chuàng)建型模式 第1式 工廠方法模式 第2式 抽象工廠模式 第3式 單例模式 第4式 建造者模式 第5式 原型模式 結(jié)構(gòu)型模式 第6式 適配器模式 第7式 橋接模式 第8式 組合模式

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

    Unity實現(xiàn)設(shè)計模式——狀態(tài)模式

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

    2024年02月08日
    瀏覽(20)
  • 【設(shè)計模式】用Java實現(xiàn)狀態(tài)模式

    狀態(tài)模式是一種行為設(shè)計模式,它允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變其行為。該模式將對象的行為包裝在不同的狀態(tài)類中,使得對象的行為可以根據(jù)其當前狀態(tài)動態(tài)改變。 狀態(tài)模式通常由以下幾個角色組成: 環(huán)境類(Context) :環(huán)境類是擁有狀態(tài)的對象,它將會根據(jù)當前狀

    2024年02月10日
    瀏覽(32)
  • 設(shè)計模式學(xué)習(xí)筆記 - 設(shè)計模式與范式 -行為型:8.狀態(tài)模式:游戲、工作流引擎中常用的狀態(tài)機是如何實現(xiàn)的?

    設(shè)計模式學(xué)習(xí)筆記 - 設(shè)計模式與范式 -行為型:8.狀態(tài)模式:游戲、工作流引擎中常用的狀態(tài)機是如何實現(xiàn)的?

    本章學(xué)習(xí)狀態(tài)模式。在實際的開發(fā)中,狀態(tài)模式并不是很常用,但是在能夠用到的場景里,它可以發(fā)揮很大的作用。從這一點上看,它有點像我們之前講到的組合模式。 狀態(tài)模式一般用來實現(xiàn)狀態(tài)機,而狀態(tài)機常用在游戲、工作流引擎等系統(tǒng)開發(fā)中。不過,狀態(tài)機的實現(xiàn)方式

    2024年04月10日
    瀏覽(29)
  • 設(shè)計模式:命令模式(C++實現(xiàn))

    命令模式(Command Pattern)是一種行為設(shè)計模式,它將請求封裝成一個對象,從而使您可以使用不同的請求對客戶端進行參數(shù)化。這使得客戶端可以獨立于具體的請求和接收者對請求進行操作。 以下是一個簡單的C++命令模式的示例: 在上述示例中,Command是命令的基類,定義了

    2024年02月07日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包