狀態模式(C 實現)

2021-09-26 04:34:46 字數 2870 閱讀 7755

(本部落格旨在個人總結回顧)

狀態模式:允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎改變了它所屬的類。

說明:

主要解決:

物件的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。

優點:

①封裝了轉換規則。

②列舉可能的狀態,在列舉狀態之前需要確定狀態種類。

③將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。

④允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。

⑤可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數。

缺點:

①狀態模式的使用必然會增加系統類和物件的個數。

②狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。

③狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。

// stdafx.h : 標準系統包含檔案的包含檔案,

// 或是經常使用但不常更改的

// 特定於專案的包含檔案

//#pragma once

#include "targetver.h"

#include #include #include using namespace std;

// todo: 在此處引用程式需要的其他標頭檔案

state.h(狀態介面類)

#pragma once

#include "context.h"

class context;

class state

;

state.cpp

#include "stdafx.h"

#include "state.h"

state::state()

state::~state()

statex.h(具體狀態類x)

#pragma once

#include "state.h"

class statey;

class statex :

public state

;

statex.cpp

#include "stdafx.h"

#include "statex.h"

#include "statey.h"

statex::statex()

statex::~statex()

void statex::operation(context* pcontext)

std::string statex::getstatename()

statey.h(具體狀態類y)

#pragma once

#include "state.h"

class statex;

class statey :

public state

;

statey.cpp

#include "stdafx.h"

#include "statey.h"

#include "statex.h"

statey::statey()

statey::~statey()

void statey::operation(context* pcontext)

std::string statey::getstatename()

context.h(上下文類)

#pragma once

#include "state.h"

class state;

class context

;

context.cpp

#include "stdafx.h"

#include "context.h"

context::context(state* pstate)

: m_pstate(pstate)

context::~context()

}void context::setstate(state* pstate)

m_pstate = pstate;

}state* context::getstate()

void context::request()

呼叫**

statepatternmemo.cpp

// statepatternmemo.cpp : 定義控制台應用程式的入口點。

狀態模式 C 實現

狀態模式 定義 允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。實用性 1 乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。2 乙個操作中含有龐大的多分支條件語句,且這些分支依賴於該物件的狀態。優點 1 將與特定狀態相關的行為區域性化,並且將不同狀態的...

設計模式C 實現(16) 狀態模式

分類 軟體設計模式c 實現 2011 08 11 08 45 50人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...

設計模式C 實現(16) 狀態模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...