随笔分类 -  C++设计模式

摘要:存在在软件系统中采用纯粹的对象方案的问题:大量细粒度的对象会很快充斥系统中,从而带来很高的运行时的代价。 需要解决的问题如何避免大量的细粒度的问题的同时,让客户段程序任然能够透明的使用面向对象的方式进行操作。 方案:运用共享技术有效的支持大量细粒度的对象。 FlyWeight 其实这部分,不太常用。 阅读全文
posted @ 2020-11-23 15:26 cyssmile 阅读(82) 评论(0) 推荐(0)
摘要:单例模式可以说得上最简单的模式,我记得我本科毕业时找工作,很多公司问到设计模式都是谈单例模式,mvc之类的。 单例模式说简单也简单,说可研究点也很多。 怎么说呢?有时候我们想保存一个全局只需要一个变量或者对象实例的时候(比如这个对象创建很复杂但是实际使用对象实例中状态基本不会变化),会怎么做呢? 可 阅读全文
posted @ 2020-11-23 11:15 cyssmile 阅读(106) 评论(0) 推荐(0)
摘要:这个模式也比较常见,但是可能不常用。解决的也是对象创建的问题,但是这个和工厂模式有点不同,工厂模式可能创建的是一个新的对象, 但是这个对象的具体的状态可能你不太关心,可能一个memset就OK了。但是有的时候状态的设置可能是比较复杂的,而且不想写那个过程,那么就可以用原型模式。 常见的原型模式,cv 阅读全文
posted @ 2020-11-22 19:27 cyssmile 阅读(104) 评论(0) 推荐(0)
摘要:1. Builder Pattern 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 建造者模式的目的很简单就是将一个复杂的对象的创建与其表示想分离。解决的问题就是那种组件基本固定不变而组 阅读全文
posted @ 2020-11-18 19:38 cyssmile 阅读(167) 评论(0) 推荐(0)
摘要:意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 同时由于需求的变化,往往存在更多的系列的对象的创建工作。 注意这个关键字“一系列”,就代表抽象工厂,是一系列相同产品的对象创建工厂的集合。 主要解决: 主要解决接口选择的问题。 何时使用: 系统的产品有多于一个的产品族,而 阅读全文
posted @ 2020-11-13 16:54 cyssmile 阅读(93) 评论(0) 推荐(0)
摘要:经常听人说工厂方法+反射机制+单例模式,可以解决大多数的对象创建的问题。但是什么是工厂方法呢?还有其他什么鬼呢? 这里先介绍简单的工厂方法,也就是Factory Method方法,既然这是简单的,那岂不是还有复制的或者其它,那是当然的。不过都得一步一步来嘛。 做什么? 首先明确我们用工厂模式做什么? 阅读全文
posted @ 2020-11-11 17:18 cyssmile 阅读(106) 评论(0) 推荐(0)
摘要:不喜欢长篇大论的,可以直接看文章最后面的一张图和我自己实现的代码。 装饰者模式 在某些情况我们可能会“过度的使用继承来拓展对象的功能”,由于继承为类型引入的静态特质,使得这种拓展方式缺乏灵活性;并且随着子类的增多(拓展功能的增多), 各个子类的组合(拓展功能的组合)会导致子类的膨胀。 如何使得“对象 阅读全文
posted @ 2020-11-11 11:37 cyssmile 阅读(275) 评论(1) 推荐(0)
摘要:1.“组件协作”模式 现代软件专业的分工后的第一个结果就是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合。 典型模式 Template Method 模板方法 Strategy 策略模式 Observer / Event 观察者模式 2.“单一职责”模式 在 阅读全文
posted @ 2020-11-09 14:52 cyssmile 阅读(49) 评论(0) 推荐(0)
摘要:观察者模式 这种模式大家可能叫它“observer/event模式” 或者"发布订阅模式"。 这种模式应用场景非常丰富,比如在项目中程序运行的性能监控,消息监控,日志信息处理,查看程序处理的进度。 在项目中运行一个程序时,通常有这样操作addWatcher(), removeWatcher(Base 阅读全文
posted @ 2020-11-09 12:02 cyssmile 阅读(91) 评论(0) 推荐(0)
摘要:strategy model 在项目开发过程中,经常有许多if-else if等结构。比如所这样一段代码 enum class Carrier { OPENCV = 0, LIBYUV, FFMPEG }; if (handler == Carrier::OPENCV) { return OpenC 阅读全文
posted @ 2020-11-09 11:01 cyssmile 阅读(123) 评论(0) 推荐(0)
摘要:模板方法 template method的方法主要是将实际传统结开发过程的“早绑定“变成面向对象中的“晚绑定”。 比如一个软件栈开发工程中有这两个角色,一个是库功能开发者,一个是解决方案的应用级的程序员。 现在来了一个需求:做一个人脸识别的场景。 那么对于做解决方案的程序员他会先去查看 库程序员提供 阅读全文
posted @ 2020-11-08 20:56 cyssmile 阅读(151) 评论(0) 推荐(0)