回答
我最喜欢的是系列中的 “用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