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

2021-07-03 03:26:17 字數 1859 閱讀 1720

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

狀態模式:允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。它有兩種使用情況:(1)乙個物件的行為取決於它的狀態, 並且它必須在執行時刻根據狀態改變它的行為。(2)乙個操作中含有龐大的多分支的條件語句,且這些分支依賴於該物件的狀態。本文的例子為第一種情況,

以戰爭為例,假設一場戰爭需經歷四個階段:前期、中期、後期、結束。當戰爭處於不同的階段,戰爭的行為是不一樣的,也就說戰爭的行為取決於所處的階段,而且隨著時間的推進是動態變化的。下面給出相應的uml圖。

實現的**比較簡單,給出war類和state類,war類中含state物件(指標形式)。

[cpp]view plain

copy

print?

class

war;  

class

state   

virtual

void

metaphase() {}  

virtual

void

anaphase() {}  

virtual

void

end() {}  

virtual

void

currentstate(war *war) {}  

};  

//戰爭

class

war  

~war()   

intgetdays()   

void

setdays(

intdays)   

void

setstate(state *state)   

void

getstate()   

};  

給出具體的狀態類:

[cpp]view plain

copy

print?

//戰爭結束

class

endstate: 

public

state  

void

currentstate(war *war)   

};  

//後期

class

anaphasestate: 

public

state  

}  void

currentstate(war *war)   

};  

//中期

class

metaphasestate: 

public

state  

}  void

currentstate(war *war)   

};  

//前期

class

prophasestate: 

public

state  

}  void

currentstate(war *war)   

};  

使用方式:

[cpp]view plain

copy

print?

//測試案例

intmain()  

delete

war;  

return

0;  

}  

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

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

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

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

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

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