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

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

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

【聲明】本題目來源于卡碼網(wǎng)(卡碼網(wǎng)KamaCoder)

【提示:如果不想看文字介紹,可以直接跳轉到C++編碼部分


【設計模式大綱】

【簡介】

? ? ? ? --什么是狀態(tài)模式(第20種設計模式)

????????狀態(tài)模式(State Pattern)是?種行為型設計模式,它適?于?個對象在不同的狀態(tài)下有不同的行為時,?如說電燈的開、關、閃爍是不停的狀態(tài),狀態(tài)不同時,對應的行為也不同,在沒有狀態(tài)模式的情況下,為了添加新的狀態(tài)或修改現(xiàn)有的狀態(tài),往往需要修改已有的代碼,這違背了開閉原則,而且如果對象的狀態(tài)切換邏輯和各個狀態(tài)的行為都在同?個類中實現(xiàn),就可能導致該類的職責過重,不符合單?職責原則。
????????而狀態(tài)模式將每個狀態(tài)的行為封裝在?個具體狀態(tài)類中,使得每個狀態(tài)類相對獨?,并將對象在不同狀態(tài)下的行為進?委托,從而使得對象的狀態(tài)可以在運行時動態(tài)改變,每個狀態(tài)的實現(xiàn)也不會影響其他狀態(tài)。


【基本結構】

????????狀態(tài)模式包括以下?個重要角色:

  • State (狀態(tài)): 定義?個接口,?于封裝與Context的?個特定狀態(tài)相關的?為。
  • ConcreteState (具體狀態(tài)): 負責處理Context在狀態(tài)改變時的?為, 每?個具體狀態(tài)?類實現(xiàn)?個與Context 的?個狀態(tài)相關的?為。
  • Context (上下?): 維護?個具體狀態(tài)?類的實例,這個實例定義當前的狀態(tài)。

【基本實現(xiàn)】

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

????????創(chuàng)建?個狀態(tài)接?,該接?聲明了對象可能的各種狀態(tài)對應的?法。

// 狀態(tài)接?
public interface State {
    void handle();
}


2. 實現(xiàn)具體狀態(tài)類:

????????為對象可能的每種狀態(tài)創(chuàng)建具體的狀態(tài)類,實現(xiàn)狀態(tài)接?中定義的?法。

// 具體狀態(tài)類1
public class ConcreteState1 implements State {
    @Override
    public void handle() {
        // 執(zhí)?在狀態(tài)1下的操作
    }
}
// 具體狀態(tài)類2
public class ConcreteState2 implements State {
    @Override
    public void handle() {
        // 執(zhí)?在狀態(tài)2下的操作
    }
}


3. 創(chuàng)建上下文類:

????????該類包含對狀態(tài)的引用,并在需要時調(diào)?當前狀態(tài)的?法。

// 上下?類
public class Context {
    private State currentState;

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

    public void request() {
        currentState.handle();
    }
}

4. 客戶端使用:

????????創(chuàng)建具體的狀態(tài)對象和上下文對象,并通過上下文對象調(diào)用相應的?法。通過改變狀態(tài),可以改變上下?對象的行為

public class Client {
    public static void main(String[] args) {
        Context context = new Context();

        State state1 = new ConcreteState1();
        State state2 = new ConcreteState2();

        context.setState(state1);
        context.request(); // 執(zhí)?在狀態(tài)1下的操作

        context.setState(state2);
        context.request(); // 執(zhí)?在狀態(tài)2下的操作
    }
}

【使用場景】

????????狀態(tài)模式將每個狀態(tài)的實現(xiàn)都封裝在?個類中,每個狀態(tài)類的實現(xiàn)相對獨?,使得添加新狀態(tài)或修改現(xiàn)有狀態(tài)變得更加容易,避免了使??量的條件語句來控制對象的行為。但是如果狀態(tài)過多,會導致類的數(shù)量增加,可能會使得代碼結構復雜。
????????總的來說,狀態(tài)模式適用于有限狀態(tài)機的場景,其中對象的?為在運?時可以根據(jù)內(nèi)部狀態(tài)的改變?改變,在游戲開發(fā)中,Unity3D 的 Animator 控制器就是?個狀態(tài)機。它允許開發(fā)?員定義不同的狀態(tài)(動畫狀態(tài)),并通過狀態(tài)轉換來實現(xiàn)角色的動畫控制和?為切換。


【C++編碼部分】

1. 題目描述

????????小明家有一個燈泡,剛開始為關閉狀態(tài)(OffState)。臺燈可以接收一系列的指令,包括打開("ON")、關閉("OFF")和閃爍("BLINK")。每次接收到一個指令后,臺燈會執(zhí)行相應的操作,并輸出當前燈泡的狀態(tài)。請設計一個程序模擬這個燈泡系統(tǒng)。

2. 輸入描述

????????第一行是一個整數(shù) n(1 <= n <= 1000),表示接收的命令數(shù)量。?接下來的 n 行,每行包含一個字符串 s,表示一個命令("ON"、"OFF"或"BLINK")。

3. 輸出描述

????????對于每個命令,輸出一行,表示執(zhí)行該命令后燈泡的狀態(tài)。

4. C++編程實例

/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file StateMode.hpp
* @brief 狀態(tài)模式
* @autor 寫代碼的小恐龍er
* @date 2024/01/24
*/

#include <iostream>
#include <string>

using namespace std;

// 前置聲明

//  狀態(tài)接口 類
class State;

// 具體狀態(tài)1 -- 打開
class StateOn;
// 具體狀態(tài)2 -- 關閉
class StateOff;
// 具體狀態(tài)3 -- 閃爍
class StateBlink;

// 上下文類 -- 關注的對象類 燈
class Light;

//  狀態(tài)接口 類
class State{
// 成員接口函數(shù)
public:
    virtual string Handle() = 0;
};

// 具體狀態(tài)1 -- 打開
class StateOn : public State
{
// 重載接口函數(shù)
public:
    string Handle() override{
        return "Light is ON";
    }
};

// 具體狀態(tài)2 -- 關閉
class StateOff : public State
{
// 重載接口函數(shù)
public:
    string Handle() override{
        return "Light is OFF";
    }
};

// 具體狀態(tài)3 -- 閃爍
class StateBlink : public State
{
// 重載接口函數(shù)
public:
    string Handle() override{
        return "Light is Blinking";
    }
};

// 上下文類 -- 關注的對象類 燈
class Light{
// 成員數(shù)據(jù)
private:
    // 燈的狀態(tài)
    State *_state = nullptr;
// 成員函數(shù) 
public:
    // 構造函數(shù)
    Light(){
        this->_state = new StateOff();
    }
    
    // 設置狀態(tài)
    void SetState(State *state){
        this->_state = state;
    }
    
    // 執(zhí)行操作
    string HandleState(){
        return _state->Handle();
    }
};

int main()
{
    // 命令數(shù)量
    int orderNum = 0;
    std::cin >> orderNum;
    // 創(chuàng)建 上下文類 -- 燈泡
    Light *light = new Light();
    // 創(chuàng)建 狀態(tài)基類
    State *state = nullptr;
    // 遍歷輸入
    for(int i = 0; i < orderNum; i++){
        // 指令類型
        string orderType = "";
        std::cin >> orderType;
        
        // 判斷
        if(orderType == "ON"){
            state = new StateOn();
        }
        else if(orderType == "OFF"){
            state = new StateOff();
        }
        else if(orderType == "BLINK"){
            state = new StateBlink();
        }
        
        // 給燈設置狀態(tài)
        light->SetState(state);
        // 打印信息
        string printInfo = light->HandleState();
        std::cout << printInfo << endl;
    }
    
    // 析構!
    delete light;
    light = nullptr;
    
    if(state != nullptr){
        delete state;
        state = nullptr;
    }

    return 0;
}


......

To be continued.文章來源地址http://www.zghlxwxcb.cn/news/detail-824880.html

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

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

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

相關文章

  • java設計模式之狀態(tài)模式

    java設計模式之狀態(tài)模式

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

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

    狀態(tài)模式是一種行為設計模式,它允許對象在內(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)
  • Java設計模式之狀態(tài)模式詳解

    大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統(tǒng)3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天,讓我們一同探討Java設計模式之狀態(tài)模式,這是代碼中的智能狀態(tài)切換,能夠讓對象在不同狀態(tài)下表現(xiàn)出不同的行為。 狀態(tài)模式的核心思想 狀態(tài)模式

    2024年01月20日
    瀏覽(23)
  • 【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

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

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

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

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

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

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

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

    2024年02月16日
    瀏覽(20)
  • 【設計模式——學習筆記】23種設計模式——狀態(tài)模式State(原理講解+應用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設計模式——學習筆記】23種設計模式——狀態(tài)模式State(原理講解+應用場景介紹+案例介紹+Java代碼實現(xiàn))

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

    2024年02月12日
    瀏覽(29)
  • C++筆記之設計模式全局狀態(tài)管理類:使整個工程項目中的所有函數(shù)可以訪問同一個變量,并且能夠感知到這個變量的變化(變量共享)

    C++筆記之設計模式全局狀態(tài)管理類:使整個工程項目中的所有函數(shù)可以訪問同一個變量,并且能夠感知到這個變量的變化(變量共享)

    —— 杭州 2024-03-21 夜 實現(xiàn)方法 : 全局變量(不介紹) 單例模式 全局狀態(tài)管理類 全局狀態(tài)管理類+單例模式 靜態(tài)變量或靜態(tài)成員(不介紹) code review!

    2024年03月22日
    瀏覽(110)
  • 設計模式(18):狀態(tài)模式

    用于解決系統(tǒng)中復雜對象的狀態(tài)轉換以及不同狀態(tài)下行為的封裝問題 環(huán)境類(Context): 環(huán)境類中維護一個State對象,它定義了當前的狀態(tài),并委托當前狀態(tài)處理一些請求; 抽象狀態(tài)類(State): 用于封裝對象的一個特定狀態(tài)所對應的行為; 具體狀態(tài)類(ConcreteState): 實現(xiàn)了抽象狀態(tài)類

    2024年04月09日
    瀏覽(19)
  • 《設計模式》狀態(tài)模式

    《設計模式》狀態(tài)模式

    定義 : 狀態(tài)模式也稱為狀態(tài)機模式, 允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變它的行為,對象看起來好像修改了它的類。 屬于 行為型 模式。 狀態(tài)模式的角色組成 : State(抽象狀態(tài)類) :定義一個接口用來封裝與環(huán)境類的一個特定狀態(tài)相關的行為,可以有一個或多個行為。 Con

    2024年02月05日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包