4. 点云处理 4.1 add_point 将一个点添加到另一个点 4.2 add_value 将相同的值添加到点的每个坐标 4.3 assign_point 用另一个点指定一个点 4.4 assign_value 为点的每个坐标指定相同的值 4.5 cross_product 计算两个向量的叉积 4.7 divide_point 将一点除以另一点 4.8 divide_
0. 简介 管道模式,不属于23种设计模式之一(是责任链模式的一种变体),但是在我们实际业务架构中还是有很多场景适用的。尤其是在多传感器的数据流处理中会非常方便。尤其是在大型场景中使用Pipeline将复杂的进程分解成多个子任务。 1. 管道模式示意图 Pipeline模式为管道模式,也称为流水线模式。顾名思义,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而
0. 简介 个人认为观察者模式作为行为模式中非常重要的一个部分,我们日常使用的事件机制就是一个观察者模式,当事件发生,所有的事件接收者执行事件响应函数。在ROS中的subscribers函数也是使用了类似的思想。它允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 1. 订阅者模式示意图 从ROS的Topic层面理解,拥有一些值得关注的状态的对象通常被称为目标
0. 简介 模板模式是行为模式的最后一章,也是我们设计模式的最后一章。模板模式是C++高级用法中不可或缺的一部分,也是作为我这种SLAMer必不可少的需要大量使用的模式。在Ceres,G2o中都可以看到这样的用法。它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 1. 模板模式示意图 我们可以看到模板模式结构是非常简单的设计模式。通过复用模板抽象类的方法能够
0. 简介 状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。这其实就有点类似算法中的有限状态机的形式。 其主要思想是程序在任意时刻仅可处于几种有限的状态中。 在任何一个特定状态中, 程序的行为都不相同, 且可瞬间从一个状态切换到另一个状态。 不过, 根据当前状态, 程序可能会切换到另外一种状态, 也可能会保持当前状态不变。 这些
0. 简介 作为行为模式的倒数第三章,策略模式在我们编写算法时是非常重要的,它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。 1. 策略模式示意图 我们可以清晰的从图中看出策略模式本质上的操作就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这
0. 简介 中介者模式和命令模式类似,都有着一层中间层来作为沟通的渠道,只是中介者模式使用了Mediator来实现实现更新函数changed。而在命令模式中使用Invoke作为最上层,用于管理具体类的操作,从而对接收者增删。简而言之,命令模式在发送者和请求者之间建立单向连接,使请求者可以调用发送者的不同方法。中介者清除了发送者和请求者之间的直接连接, 强制它们通过一个中介对象进行间接沟通。 1
0. 简介 迭代器模式是一种行为设计模式, 它可以有效管理数据流动的同时,让用户能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。 迭代器通常会提供一个获取集合元素的基本方法。 客户端可不断调用该方法直至它不返回任何内容, 这意味着迭代器已经遍历了所有元素。 1. 迭代器模式示意图 迭代器模式的使用方法和c11的迭代器使用方法类似,这是我们会根据我们的需求去建
0. 简介 我们在遇到类似GUI中多种Button点击功能的操作时,我们应该将请求的所有细节 (例如调用的对象、 方法名称和参数列表) 抽取出来组成命令类, 该类中仅包含一个用于触发请求的方法。 命令模式就是这样一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 并能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 1. 命令模式示
0. 简介 对于责任链模式,其作为一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。这种处理方法类似包与包之间的调用的思路,只是其可以不在主程序中累赘的去申明一堆if else变量使得程序更加臃肿。 相比于创建设计模式的对整体架构进行的设计,和结构设计模式对对象的化繁为简的操作,作为行为设计模式,其需要我们对数据
0. 简介 外观模式作为我们常用结构模式的最后一节,一些不常用的比如说桥接、享元、代理等,这里等有时间在补充学习吧。下面我将会来继创建模式和结构模式后来讲行为模式。 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这些接口使得这一子系统更加容易使用. 其基本的结构体大致如下
0. 简介 这一次我们继续来讲结构型模式中的组合设计模式。组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。在一般组合模式中中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现组合方法接口的所有子类都具备了Add和Remove,但是只是是虚函数,并不会去使用。 1. 组合模式结构 如下图所示为组合模式的示意图,主要的核心
0. 简介 很多时候我们在接手代码的时候会发现很多时候我们需要在原本基础的类中加入一些功能,或者要调用多个类来组合成一个新类来工作。这时候我们需要使用装饰或者适配器模式来对整个结构去聚合或者多重继承出自己想要的类型。装饰模式是一种结构型设计模式,其可以动态的为一个类增加职责(相对于继承)。 1装饰模式 部件 (Component) 声明封装器和被封装对象的公用接口。 具体部件 (Concre
0. 简介 适配器模式是一种结构型设计模式, 它能将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。他和装饰器模式一样可以动态扩展一些遗留或者不好改动的代码。
0. 简介 生成器是一种创建型设计模式, 当构建一个复杂对象时,将构建过程与表示分离。使得同样的过程创建不同的对象。生成器与其他创建型模式不同, 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() ),来组成复杂的对象。相
0. 简介 继单例模式写完后,我觉得对于C++的高级用法可以来开一个专栏来专门整理与阐述,这里,我将以我们最常用的工厂模式开始,来逐步的共同学习。 1. 初级工厂模式 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。本节从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。这里借用网络上的例子
0. 简介 有时候我们在面对通用代码时候,经常会尝试着创建多个示例函数来对一个函数多次赋值,这样会损耗很多的内存空间,这对于代码来说是不利的。而单例模式可以很好的解决这个问题。但是实现一个实用的单例模式来说,这个并不容易。 1. 单例函数 1.1 饿汉模式 饿汉模式 是指单例实例在类装载时就构建,并被立即执行初始化: public class Test { private Test
C++模式
博客
泡泡
积分
勋章
SLAM本质剖析-Boost之Geometry函数大全(二)
C++之管道(Pipeline)模式
C++之观察者(Event-Subscriber)模式
C++之模板(Template)模式
C++之状态(State)模式
C++之策略(Strategy)模式
C++之中介者(Mediator)模式
C++之迭代器(Iterator)模式
C++之命令(Command)模式
C++之责任链(Chain of Responsibility)模式
C++之外观(Facade)模式
C++之组合(Composite)模式
C++之装饰(decorator)模式
C++之适配器(Adapter)模式
C++之生成器(builder)模式
C++之工厂(factory)模式
C++之单例(singleton)模式
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信