1. 程式人生 > >C++設計模式:狀態模式

C++設計模式:狀態模式

一、原始碼:

#include<iostream>
#include<memory>

using namespace std;

class State;
class Context
{
public:
    Context()
    {
        this->_state = nullptr;
    }
    void setState(shared_ptr<State> state)
    {
        this->_state = state;
    }
    shared_ptr<State> getState()
    {
        return _state;
    }
private:
    shared_ptr<State> _state;
};

class State
{
public:
    virtual void doAction(shared_ptr<Context> context) = 0;
    virtual ~State() = default;
};

class StartState:public State
{
public:
    virtual void doAction(shared_ptr<Context> context) override
    {
        cout<<"Player is in start state"<<endl;
        context->setState(make_shared<StartState>(*this));
    }
    string toString()
    {
        return "  Start State";
    }
};

class StopState:public State
{
public:
    virtual void doAction(shared_ptr<Context> context) override
    {
        cout<<"Player is in stop state"<<endl;
        context->setState(make_shared<StopState>(*this));
    }
    string toString()
    {
        return "  Stop State";
    }
};

int main()
{
    shared_ptr<Context> context = make_shared<Context>();

    shared_ptr<State> startState = make_shared<StartState>();
    startState->doAction(context);
    cout<<(dynamic_pointer_cast<StartState>(context->getState()))->toString()<<endl;

    shared_ptr<State> stopState = make_shared<StopState>();
    stopState->doAction(context);
    cout<<(dynamic_pointer_cast<StopState>(context->getState()))->toString()<<endl;
}

二、執行結果:

相關推薦

C++設計模式狀態模式

一、原始碼: #include<iostream> #include<memory> using namespace std; class State; class Context { public: Context() {

重新思考Swift中的設計模式狀態模式

本文展示瞭如何在Swift中實現State模式,利用Swift的強大功能使實現更簡單,更靈活。我們通過一個例子來探索狀態模式的各個方面,並評估其處理需求變化的能力。然後,我們將瞭解關鍵實現注意事項以及模式的優點和實際應用。 #有限狀態自動機 真實世界域通常包含可以在任何時間點處於有限數量的可能狀態之一的實體。

Java設計模式(二十)之行為型模式狀態模式

 在介紹狀態模式之前,我們先來看這樣一個例項:你公司力排萬難終於獲得某個酒店的系統開發專案,並且最終落到了你的頭上。下圖是他們系統的主要工作(夠簡單)。 當你第一眼看到這個系統的時候你就看出來了這是一個狀態圖,每個框框都代表了房間的狀態,箭頭表示房間狀態的轉換。分析如下

設計模式狀態模式(State Pattern)

/** * 狀態模式。 * @author Bright Lee */ public class StatePattern { public static void main(String[] args) { Context context = new Context();

設計模式狀態模式

登錄 研究 現狀 finished ini 用戶系統 只需要 效果 這樣的   遇到這樣的場景時,如: 紅綠燈狀態不同,行人的行為不同。網上購物時,訂單有不同的狀態。 電梯的運行狀態,維修,自動關門,開門,向上,向下等這些不同的狀態對應不同的行為時可以將狀態統一封裝 采用狀

JAVA設計模式狀態模式

1 package study.designmode.statemode; 2 3 public class CandyMachine { 4 5 final static int SoldOutState = 0; //初始狀態 6 final static i

C#設計模式系列狀態模式(State)

1、狀態模式簡介 1.1>、定義   狀態模式的核心思想是允許一個物件在它的內部狀態改變時改變它的行為,即不同的狀態對應不同的行為。   狀態模式的針對性很強,當有狀態變化的時候可以選擇狀態模式。 1.2>、使用頻率    中等 2、狀態模式結構

C++設計模式狀態模式(二)

virtual alt 虛構函數 需求 rate names clas term delete 2、智能空調的設計與實現 某軟件公司將開發一套智能空調系統: 系統檢測到溫度處於20---30度之間,則切換到常溫狀態;溫度處於30---45度,則切換到制冷狀態;

[C++設計模式] state 狀態模式

sso 麻煩 -a head 分支 rtu 相關 代碼 pst 《head first 設計模式》中的樣例非常不錯,想制造一個自己主動交易的糖果機,糖果機有四個狀態:投入錢不足,投入錢足夠,出售糖果,糖果售罄。糖果機的當前狀態處於當中不同的狀態時,它針對同一個操作的

C#設計模式之結構類模式裝飾模式

負責 gzip null pattern 產生 設計師 san 抽象 接口 定義(Decorator Pattern): 動態的給一個對象添加一些額外的職責。就添加功能來說,它相比生成子類更為靈活。 一、引言 在軟件開發中,我們經常想要對一類對象添加不同的功能,例如要給手

C#學習之設計模式工廠模式

缺陷 進行 type 系列 concrete 改變 cnblogs static 優劣   最近研究一下設計模式中工廠模式的應用,在此記錄如下:   什麽是工廠模式?   工廠模式屬於設計模式中的創造型設計模式的一種。它的主要作用是協助我們創建對象,為創建對象提供最佳的方式

C#設計模式原型模式(Prototype Pattern)

設計 公司 ext spa type img 存在 變化 new 一,原型模式:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來實施創建。 using System; using System.Collections.Gene

C#設計模式外觀模式(Facade Pattern)

避免 linq 訪問 客戶端 這一 存在 www 針對 public 一,什麽是外觀模式? 外觀模式:為子系統中的一組接口提供一個一致的界面,定義一個高層接口,這個接口使得這一子系統更加容易使用。 二,我們看看代碼的實現 using System; using Syste

C++設計模式狀態模式

程序 class lse 轉移 tchar pri dot ace RKE 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。 狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於復雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的

23種設計模式(16)狀態模式

ava 關系 subclass [] key 語句 多分支 分支 ctx 概述 定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。 類型:行為類模式。 類圖: 適用性: 1.一個對象的行為取決於它的狀態,並且它

23種設計模式 之 State模式狀態模式C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

設計模式狀態模式(二)

完整工程:https://gitee.com/NKG/DesignPatterns/blob/master/DesignPatterns.unitypackage 首先在Unity下面建立如下檔案 首先是場景都要繼承的 ISceneState 其中包括了場景的生命週期函式,

設計模式狀態模式(一)

當我們用Unity進行場景切換時,可能會寫下如下程式碼: using UnityEngine; using UnityEngine.SceneManagement; public class ReverseVersion : MonoBehaviour { private stri

C++設計模式狀態模式

#ifndef __STATE_H__ #define __STATE_H__ #include <iostream> #include <string> //狀態模式:允許

設計模式對比策略模式狀態模式、橋接模式

《策略模式》與《狀態模式》有相同的類結構圖,與《橋接模式》結構非常相似。 目的不同: 策略模式:策略模式的目的是封裝一系列的演算法,使這些演算法能夠相互替換。 狀態模式:封裝狀態對應的行為,並在內部狀態改變的時候改變物件的行為。 橋接模式:分離抽象部分與實現部分,使得它們可以獨立地變化。 狀態模式與策略模