![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 85
Jeff_
面向Google和StackOverflow编程的小学生。
展开
-
设计模式:创建型模式之工厂模式(c++)
前言工厂方法模式(英语:Factory method pattern) 又称为 虚拟构造函数、Virtual Constructor、Factory Method,是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型,工厂方法让类的实例化推迟到子类中进行。简单工厂模式简单工厂模式我们将其分为以下几类:工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。抽象产品角色:它一般是具体产品继承的父类或者实现的接口。具体产品角色:工厂类所创建的对象就是此角色的原创 2021-04-07 23:59:33 · 214 阅读 · 0 评论 -
我们是否需要 do...while(0)
1. 前言在许多C / C ++宏中,可以看到许多看起来毫无意义的do while循环中的宏代码。Like:#define FOO(X) do { f(X); g(X); } while (0)#define FOO(X) if (1) { f(X); g(X); } else它的意义是什么,又有哪些意想不到的好处?2. 引入2.1 条件语句引起的逻辑错误上面例子若使用上诉规则,而直接表达:#define FOO(X) f(X); g(X)现在,如果 FOO(X) 在 if ...原创 2021-01-30 17:53:21 · 181 阅读 · 0 评论 -
Linux搭建自己编译的工程
自己编写Makefile (工程简单)apt-get install make安装make工具。Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指示, 注释)显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件, 生成的命令)隐晦规则 :: make的自动推导功能所执行的规则变量定义 :: Makefile中定义的变量文件指...原创 2020-03-21 23:08:51 · 1162 阅读 · 1 评论 -
pimple idiom
我们知道,当对头文件进行更改时,包括它的所有源都需要重新编译。在大型项目和库中,由于即使对实现进行了很小的更改,每个人都必须等待一段时间才能编译代码,这可能会导致构建时间问题。解决此问题的一种方法是使用PImpl Idiom,它将实现隐藏在hearer中,并包括一个可立即编译的接口文件。The PImpl Idiom (Pointer to IMPLementation) 是一种用于将实现与接...原创 2020-04-23 23:17:58 · 380 阅读 · 0 评论 -
Liskov substitution principle (里氏替換原則)
文章目录背景Tom's Penguin Problem背景可替代性是面向对象程序设计中的一项原则,其指出在计算机程序中,如果S是T的子类型,则类型T的对象可以用类型S的对象替换 (即类型T的对象可以用子类型S的任何对象替换 (i.e.向上转型))而不更改程序的任何期望属性(正确性,任务执行等)。更正式地讲,Liskov替换原理(LSP)是子类型关系的特定定义,称为(强)行为子类型化,最初是由...翻译 2020-04-23 20:03:25 · 560 阅读 · 0 评论 -
使用SIMD(单指令流多数据流)技术来提高程序性能
背景单指令流多数据流(英语:Single Instruction Multiple Data,縮寫:SIMD)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX或SSE,以及AMD的3D Now!指令集。图形处理器...原创 2019-07-21 10:07:15 · 4279 阅读 · 0 评论 -
设计模式:创建型模式之单例模式(c++)
简介 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 如何解决:判断系统是否已经...原创 2019-11-24 17:59:03 · 186 阅读 · 0 评论 -
IOC(Inversion of Control 控制反转)
背景我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑。如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,...转载 2019-11-24 23:14:26 · 720 阅读 · 0 评论 -
AOP(Aspect-oriented programming,面向切面编程)
概述面向切面的程序设计(Aspect-oriented programming,AOP)是CS计算机科学中的一种程序设计泛型,旨在将横切关注点与业务主体进行进一步分离,以提高程序代码的模块化程度。其可以通过预编译方式和运行期动态代理实现在不修改源码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可...翻译 2020-02-04 16:46:03 · 1712 阅读 · 0 评论 -
代码的抽象三原则
软件开发是"抽象化"原则(Abstraction)的一种体现。所谓"抽象化",就是指从具体问题中,提取出具有共性的模式,再使用通用的解决方法加以处理。最近,我读到美国程序员Derick Bailey的一篇文章,谈到"抽象化"应该遵循的三个原则,觉得很有启发。一、DRY原则DRY是 Don’t repeat yourself 的缩写,意思是"不要重复自己"。软件工程名著《The Prag...转载 2020-02-14 19:13:09 · 559 阅读 · 0 评论 -
KISS principle (kiss原则)
Keep It Simple Stupid (KISS)原则声明即使解决方案看起来很愚蠢,简单的解决方案也比复杂的解决方案好。描述该KISS原则是关于追求简单。现代编程语言,框架和API具有强大的手段来创建针对各种问题的复杂解决方案。有时,开发人员可能会想编写使用所有这些复杂功能的“聪明”解决方案。该KISS原则指出,一个解决方案是更好的时候,使用更少的继承,多态少,少类等。遵循KISS...翻译 2020-03-21 15:26:04 · 1618 阅读 · 0 评论 -
Monads in C++ (函数编程)
C ++中的Monad?帖子的名字真奇怪。但这并不奇怪。使用std :: optional C ++ 17可获得monad。Eric Niebler的范围库和扩展的期货也是monads。对于这两者,我们都可以期望在C ++ 20中实现。Bjarne Stroustrup在2016年C ++会议上的“秘密闪电演讲”中介绍了Concepts Lite的一些概念,这些概念我们很可能会在C ++ 20中...翻译 2020-04-12 23:16:41 · 1132 阅读 · 0 评论