【設計模式】的C語言的設計模式及其應用

轉自https://blog.csdn.net/devcloud/article/details/95615621

【摘要】 軟件編寫模式是開發過程中的重要經驗總結。靈活運用設計模式,一方面利於我們編寫高質量的代碼,另一方面也方便我們對代碼進行維護。

設計模式最開始是針對面嚮對象語言提出的。經典的書如《設計模式:可複用面向對象軟件的基礎》,《java與模式》。《設計模式》的作者俗稱”GOF”, gang of four,書中從面向對象的設計中精選出23個設計模式,這個也成了後來設計模式的範例。

C語言設計模式的書非常少,目前沒有看到合適的。有一本《C嵌入式編程設計模式》,作者douglass。書一共6章,裏面沒有太多高含金量的內容。書的主要問題在於沒有真正把設計模式應用到C,而是把一些基本的嵌入式開發注意點包裝成模式,中斷算一種設計模式,輪詢算一種設計模式,互斥算一種模式。照這個套路,C函數指針使用肯定也算一種模式,強制類型轉換肯定也得算。我覺得是爲了出書而濫造模式。這本書就狀態機模式描述比較多些。這人還合寫了另外一本書叫《Real-Time Design Patterns》,我也感覺內容非常稀,那些內容根本不能稱爲設計模式(Design Patterns)。我以後不會看他的書了。

本專題嘗試簡單講解設計模式的思路,在嵌入式中的應用和樣例代碼入手,特別是注意設計模式在linux內核和實際開發中的應用,總結出真正在C語言和嵌入式開發中有生命力的少數幾個模式。C語言實現設計模式的幾個利器有結構體,函數指針,利用數組實現多態。

本專題講解模式會按照如下格式:

u  模式的介紹

u  模式的應用場景

u  樣例代碼

u  模式總結

樣例代碼全部以C代碼實現,可能會穿插講解java樣例以方便對比爲什麼C實現模式演化成這個樣子以及和面嚮對象語言的差異。
C語言應用設計模式的誤區

在C語言開發中應用設計模式有幾種現象,分析如下

用C模擬面向對象

用C模擬面向對象,用結構體模擬類,用結構體包含看作繼承。這種做法在特定需要的場合少量使用尚可,但是如果爲了模擬面向對象的特性就南轅北轍了。

用很多特定的宏來將C在形式上封裝爲C++

用C模仿面向對象和設計模式有另外一種流派,就是用很多特定的宏來封裝。我非常反對這種用法,因爲基本上對於程序員而言,已經對C語言的閱讀和書寫造成了嚴重的干擾,不能爲了面向對象而面向對象,C語言自然有其簡潔高效的一面。

盲目追求設計模式

隨着設計模式的思想的普及,很多設計師對設計模式盲目崇拜和過分追求,爲了用模式而用模式,削足適履。對於嵌入式開發常用的C語言而言,少了很多面向對象的特點,經典的23個設計模式肯定不會都適用,而且在實際工作中,其實也不會爲了模式而模式。而且從技術上講23個設計模式當時是圍繞面向對象提出的,有的模式偏向於邏輯,那麼可以被C借鑑,有的是爲了解決面向對象本身的集成,關聯等問題,那就沒有必要借鑑。
各章節鏈接
設計模式的C語言應用-狀態機模式-第二章

設計模式的C語言應用-責任鏈模式-第三章

設計模式的C語言應用-觀察者模式-第四章

設計模式的C語言應用-命令模式-第五章

設計模式的C語言應用-適配系列模式-第六章

設計模式的C語言應用-建造者模式-第七章 

 設計模式的C語言應用-外觀模式-第八章

設計模式的C語言應用-訪問者模式-第九章

設計模式的C語言應用-非典型模式-第十章

 


設計模式的分類

設計模式如下分爲創建型模式,結構型模式,行爲型模式。

創建型模式

         1、抽象工廠模式(Abstract Factory)

         2、建造者模式(Builder)

         3、工廠方法模式(Factory Method) 

         4、原型模式(Prototype) 

         5、單例模式(Singleton) 

結構型模式

         1、適配器模式(Adapter) 

         2、橋接模式(Bridge) 

         3、組合模式(Composite) 

         4、裝飾者模式(Decorator) 

         5、外觀模式(Facade) 

         6、享元模式(Flyweight) 

         7、代理模式(Proxy)、

行爲型模式

         1、職責鏈模式(Chain of Responsibility) 

         2、命令模式(Command) 

         3、解釋器模式(Interpreter) 

         4、迭代器模式(Iterator) 

         5、中介者模式(Mediator) 

         6、備忘錄模式(Memento) 

         7、觀察者模式(Observer) 

         8、狀態模式(State) 

         9、策略模式(Strategy) 

         10、模板方法模式(Template Method) 

         11、訪問者模式(Visitor)  
————————————————
版權聲明:本文爲CSDN博主「華爲雲」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/devcloud/java/article/details/95615621

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