回答
我最喜歡的是系列中的 「用C模式」,由Adam Petersen:
另外:我總是認爲goto
作爲一個偉大的窮人的裝飾模式的工具。
是的,有。延遲初始化,單身,對象池,對象狀態等,很容易在純C.
例(延遲初始化)實施
#include <stdio.h>
struct foo
{
int payload;
};
int calculate_payload()
{
printf("%s\n", "Performing lengthy initialization...");
return 42;
}
struct foo *get_default_foo()
{
static int foo_calculated = 0;
static struct foo default_foo;
if (!foo_calculated) /* assuming single-threaded access */
{
foo_calculated = 1;
default_foo.payload = calculate_payload();
}
return &default_foo;
}
int main()
{
struct foo *foo1, *foo2;
printf("%s\n", "Starting the program");
foo1 = get_default_foo();
printf("%d\n", foo1->payload);
foo2 = get_default_foo();
printf("%d\n", foo2->payload);
return 0;
}
設計模式往往是從什麼現有環境只是一個級別車型的東西提供。如果你將C的標準庫作爲環境,一個傑出的設計模式是面向對象。
通過回調的多態性,例如,標準庫的qsort
函數。它所需要的只是一種比較兩個元素的方法,它可以對它們進行排序。
通過使用函數集(vtable)來表示一個類型的相關屬性,以便通用例程可以有效地處理它,您可以比這更復雜。例如,讀取,寫入等在打開的文件或網絡端口上調用。
我喜歡使用回調。您可以創建一個通用數據結構遍歷函數,該函數在每個元素上執行回調函數。 – onemasse 2010-11-06 14:11:23
設計模式可被視爲缺少語言功能。的Design Patterns: Elements of Reusable Object-Oriented Software的簡介指出:
編程語言的選擇是 重要的,因爲它影響着一個人的 的觀點。我們的模式假設 Smalltalk/C++級別的語言功能, 和那個選擇決定什麼可以 和不能輕易實現。 如果 我們假定程序語言,我們 可能包含名爲「繼承」,「封裝」, 和「多態性」的設計模式 。同樣,我們的一些 模式直接支持 不太常見的面向對象的 語言。 CLOS具有多種方法,例如 示例,這樣可以減少對訪問者等 模式的需求。 (我加)
這句話用斜體字是回答你的問題。
虛擬文件系統是學習設計模式很好的例子。
- 1. 有沒有登錄的設計模式?
- 2. 有沒有'耙樣'的設計模式?
- 3. 有沒有這樣的設計模式?
- 4. 有沒有不好的設計模式?
- 5. 有關Singleton設計模式和C#
- 6. 在Java設計模式中有沒有好的視頻?
- 7. C++設計模式
- 8. 有沒有這樣的設計模式?如何調用它?
- 9. 有沒有創建嚮導的設計模式?
- 10. 有沒有庫存管理設計模式?
- 11. 有沒有人認識到這種JavaScript設計模式?
- 12. 有沒有好的設計模式食譜/食譜資源?
- 13. 有沒有一種'Crystal Ball'OOP設計模式?
- 14. 有沒有處理串口通信的設計模式?
- 15. 有沒有高性能文件解析的設計模式?
- 16. 有沒有更好的設計模式/方法使用?
- 17. 你有沒有聽過「位置」設計模式?
- 18. 這個設計模式有沒有名字?
- 19. 有沒有與此方法相匹配的設計模式?
- 20. 在QML/QT設計模式中沒有按鈕組件
- 21. 設計模式沒有顯示Dreamweaver中的任何元素
- 22. 調試設計模式在Visual Studio中沒有違反
- 23. C#ProgressBar設計模式
- 24. c原型設計模式#
- 25. C++異常設計模式
- 26. C++設計模式暗示
- 27. C#設計模式建議
- 28. C#建築 - 設計模式
- 29. 計數器沒有設置回零C#
- 30. 有沒有任何標準的方式或設計模式來處理?
你能詳細說明goto與裝飾器有什麼關係嗎? – 2015-08-14 16:48:56
這是Adam Tornhill(彼得森)的精彩小系列。他的[完整書籍](https://leanpub.com/patternsinc)可用。這一小組模式將在C中佔據很長一段路。 – 2017-10-31 10:56:33