信任C++,以及設計模式之觀察者模式、狀態機初窺

如果你不覺得自己一年前的代碼很沙雕,那你這一年也沒什麼進步

最近學習C++,有一個感受是首先要克服對其的陌生感以及不信任。之前用 Python 的時候,腦子裏經常會想,這個特性 C++多半不支持。而且之前甚至會覺得,vector 和 string 等這些標準庫一定是犧牲了性能才換取了便捷性的。現在才發現,這簡直是天大的誤會,也要感謝《C++ primer》一再強調儘量使用新標準中的新特性、以及標準庫等,它們在實現時是有嚴格的性能要求的,要好過C中類似的工具或特性。

所以最近在學習《C++ primer》時常常有相見恨晚的感覺,如果當時沒有被坊間C++很難的傳言嚇退,而是早點接觸了,現在會不會不一樣。今天部門內部組織優秀代碼評選,聽到了很多設計模式之類的東西,甚至還有同事用C來實現了面向對象的編程。印象比較深的幾個概念有:里氏替換原則,開閉原則,觀察者模式,測試驅動開發模式,通用狀態機等等。它們對我來說還是有些遙遠,所以一時無法總結太詳細,就簡單記錄一下資料中的兩種設計模式的內容吧。

1. 觀察者模式

以下內容參考自知乎文章:https://zhuanlan.zhihu.com/p/20540213

觀察者模式面向的需求是:A對象(觀察者)對B對象(被觀察者)的某種變化高度敏感,需要在B變化的一瞬間做出反應。程序中採用註冊(Register)或者成爲訂閱(Subscribe)的方式告訴被觀察者:我需要你的某某狀態,你要在它變化時通知我。採取這樣被動的觀察方式,既省去了反覆檢索狀態的資源消耗,也能夠得到最高的反饋速度。
觀察者模式通常基於Subject和__Observer__接口類來設計

對於我這樣連面向對象程序設計都不熟悉的人來說,設計模式實在有點高深,但是現在用不出不代表現在不能學,提前在腦海中有個概念,之後需要的時候再去精進也不失爲一種策略。

2. 狀態機

以下內容參考自豆瓣:https://www.douban.com/note/151091561/

意圖:允許一個對象在其狀態改變時,改變它的行爲。看起來對象似乎修改了它的類。

適用性:
1、一個對象的行爲取決於它的狀態,並且它必須在運行過程中可以根據它的狀態改變它的行爲;
2、一個操作中含有龐大的多分支的條件語句,並且這些分支依賴於該對象的狀態;這個狀態通常使用一個或多個枚舉常量表示;通常,有多個操作包含這一相同的條件結構;State模式把每一個條件分支放入一個獨立的類中;這使得你可以根據對象自身的情況把對象的狀態作爲一個對象,而且這一對象可以不依賴於其它對象而獨立變化;

這一條似乎是避免了過於龐大的 if…else 語句塊,在代碼的壞味道中,過多的if/else語句名列其中。自己見到的業務場景中也確實有類似的情況出現,但是是否有更加深奧精妙的用途和含義,可能只能等到日後慢慢發掘了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章