C语言装饰器模式实现

C语言是面向过程的一门语言,更注重过程,是一个一个函数进行一个一个去执行 是这么一个过程,那么我们怎样来实现用C语言来实现类似装饰器模式的效果呢?

每个函数是一个单独的过程,这个函数编写之后,我们可以为这个函数添加新的功能或者逻辑而不改动原函数,这就实现了类似装饰器的效果了。C语言中指针很强大,任何定义的函数都可以用函数指针指向函数。所以可用通函数指针将函数传到另一个函数中。C语言中多态的形式也是通过函数指针来类似实现的。

C语言装饰器模式代码展示

实际上就是在通过函数指针执行函数的前后执行执行装饰器的内容

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//2000年写的函数
int add(int num1,int num2)
{int sum = num1 + num2;printf("%d+%d=%d\n", num1, num2, sum);return sum;
}
//2000年写的函数
int sub(int num1,int num2)
{int sub = num1 - num2;printf("%d-%d=%d\n", num1, num2, sub);return sub;
}
//可以继续拓展其他函数
//2008年写的函数
int mul(int num1, int num2)
{int mul = num1* num2;printf("%d*%d=%d\n", num1, num2, mul);return mul;
}/*
使用装饰器模式 在C语言中可以实现类似多态的效果
可以很方便的进行拓展
这个函数 又被称为架构函数
*/
void wapper(int(*func)(int,int),int num1,int num2)
{printf("进入装饰器\n");//类似回调函数嘛,函数前后 可以进行装饰或者其他逻辑处理func(num1, num2);printf("走出装饰器\n");
}int main(int argc, char *argv[])
{wapper(add, 20, 30);wapper(sub, 20, 30);wapper(mul, 20, 30);return 0;
}

C语言装饰器模式运行结果


C语言版:装饰器模式相关推荐

  1. 装饰器模式代码举例(java语言版)

    前言:为了解决子类膨胀问题,把被装饰的以关联的方式放入装饰类里面,装饰类添加新的功能,如果需要再扩展新功能的时候,那么可以考虑直接继承装饰类.下面是一个画圆的例子(其实ServletRequest.H ...

  2. go设计模式之装饰器模式

    go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...

  3. python版:装饰器模式

    装饰器模式介绍 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰器模式实现 设计模式只是一种思想与语言无关,设 ...

  4. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

  5. 漫画设计模式:什么是 “装饰器模式” ?

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) -----  第二天  ----- ------------ 装饰器模式都包含哪些核心角色呢? 1. Compone ...

  6. 设计模式学习----装饰器模式

    这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...

  7. 设计模式学习(三)——装饰器模式

    前言 距离上一次正儿八经地写随笔已经有一段时间了,虽然2月10号有一篇关于泛型的小记,但是其实只是简单地将自己的学习代码贴上来,为了方便后续使用时查阅,并没有多少文字和理解感悟.之所以在今天觉得有必要 ...

  8. python 装饰器 继承_Python设计模式之装饰器模式

    装饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) 使用组合 使用继承 注意,本文中的Decorat ...

  9. Java装饰器模式详解

    前言 装饰器模式也叫做包装器模式,属于结构性设计模式一种,装饰器设计模式在实际的生活中也有很多体现,举例来说,某手机厂商发布了XXX标准版手机,为了吸引用户眼球,提升销量,还特别有纪念碑,青春版,至尊 ...

最新文章

  1. android sqlite操作(2)
  2. VTK:可视化之BackgroundTexture
  3. MAC MAMP 中安装配置使用 ThinkPHP
  4. 致SEO初学者:学习SEO要注意的几个问题
  5. c语言 大数相加,c/c++开发分享C语言计算大数相加的方法
  6. 机器学习模型 非线性模型_机器学习:通过预测菲亚特500的价格来观察线性模型的工作原理...
  7. PyQt5 Python主对话框创建关于对话框源代码
  8. 前端开发---ppt展示页面评论区展示
  9. 【luogu1018】 乘积最大 [区间dp+高精][noip2000]
  10. CoolBlog开发笔记第2课:搭建开发环境
  11. android 仿小米便签,高仿小米便签
  12. Mybatis collection 递归查询并自动装填所有子节点(多参数查询传入参数方法)
  13. javascript 的alert()功能 prompt() 功能
  14. 【spring】spring 的事务(transaction) 四 嵌套事务PROPAGATION_NESTED
  15. tkinter + wxpy 实现微信发送信息 接收消息 并保存聊天记录的功能(GUI)
  16. 神经网络模型的工作原理,人脑神经网络模型
  17. 无监督低照度图像增强网络ZeroDCE和SCI介绍
  18. 爬虫代理和验证码识别
  19. cufft1d c2c
  20. NYIST 113 字符串替换

热门文章

  1. tomcat配置url跳转_web和tomcat的区别
  2. 1.7编程基础之字符串_04石头剪子布
  3. 成都python数据分析师职业技能_Python+大数据分析师
  4. 博图能打开s7200吗_域名掉备案了,还能打开吗?域名掉备案了怎么办?
  5. 数据库工作笔记/设计思路-通过增加索引表为某库中其他表添加索引(描述信息)
  6. Qt开启本地事件循环(防止界面卡阻塞【卡死】)QEventLoop 的基本使用
  7. MySQL入门之视图
  8. python创建百万个文件_python百万sitemap制作
  9. python截取字符串函数substr_PHP substr():截取字符串
  10. python输入的数字为什么不能计算_计算器为什么只能进行个位数的计算,每次只能输入一个数字,求...