
小议设计模式
程杰老师,《大话设计模式》珠玉在前,小弟不敢造次。面向对象编程思想(OOP),是设计模式基础的基础,而设计模式是面向对象的完美诠释。也即,设计模式是面向对象的进阶,想要学习设计模式先打好OOP的基础。本专栏以C++为编程语言,从具体的应用案例出发,曲径通幽,触摸设计模式的精髓。
五道口纳什
wx公众号/B站:五道口纳什
展开
-
C++ 设计模式 —— 访问者(Visitor)
访问者设计模式的实现借助于两个继承体系,(1)elements:一个是被操作的类(基类及其子类)(2)visitors:一个定义了一系列操作的访问者(基类及其子类)访问者模式是一种行为型设计模式(behavioral design pattern),被用于为一个树形结构(Node、LeafNode、InternalNode)中的 elements 增加操作。使用访问者设计模式,我们不需在 el原创 2016-03-28 21:46:56 · 5025 阅读 · 1 评论 -
C++ 设计模式 —— 策略模式(Strategy)
策略模式是一种行为型设计模式(behavioral pattern),用于将不同的算法(算法之间的关系是平行的,也即,它们可以解决相同的问题,只不过采取了不同的策略,比如用于聚类的 Kmeans,FCM之间)封装在不同的类中,也即策略模式用于组织解决同一问题不同算法,以方便客户端(也即是下文的 Context 类)灵活地调用。最终得到算法的替换、变化可以独立于客户端完成。其 UML 类图关系如下:原创 2016-03-28 20:48:52 · 5646 阅读 · 0 评论 -
C++设计模式——模板方法(Template Method)
模板方法(template method)设计模式用于定义一个包含许多步骤的算法框架,允许子类重写(覆盖)算法的某一个步骤而不改变算法整体的流程和框架。例如一个算法(如聚类算法)可能包含初始化(initialization)、迭代(iteration)以及后处理(post-preprocessing)三个环节,现实中存在多种初始化(initialization)的方法。实现模板方法设计模式的手段即是原创 2016-03-17 16:02:13 · 2036 阅读 · 0 评论 -
C++设计模式——Composite 组合模式
Composite objects into a tree structure so that individual objects and compositions of objects can be treated uniformly.组合模式用于将对象(s)组合成一个树形结构,来表示部分-整体的层次关系(part-whole hierarchy),该设计模式允许客户以一个统一的方式对待每一个原创 2016-03-13 17:43:18 · 1776 阅读 · 0 评论 -
utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
utilities(C++)——单例(Singleton) 上文简单版的单例类的实现的一大核心问题,在于new出来的堆对象不会被释放,就有可能造成内存泄漏的风险。class Singleton{public: // 通过类名获得类实例指针 static Singleton* instance() { if (!_instance)原创 2016-03-13 16:16:22 · 7605 阅读 · 0 评论 -
utilities(C++)——单例(Singleton)
通过类名获得类实例指针禁止拷贝将构造函数声明为私有的原创 2016-03-13 15:54:48 · 1452 阅读 · 0 评论 -
C++设计模式——从多态到观察者模式到MVC架构
我们先从宏观整体上把握MVC的架构与流程:原创 2015-11-28 15:35:10 · 2724 阅读 · 0 评论 -
C++设计模式::装饰模式or代理模式or面向切片编程(AOP)
一个实例 装饰模式:动态地给一个对象(而非一个类)添加一些额外的职责。就增加功能来说,装饰模式比创建子类更加灵活,因为有时我们的需求是给某个对象而不是整个类添加一些功能,比如为一部手机添加增加挂件、屏幕贴膜等等特性,一种比较灵活的方式,将手机(被装饰器类)嵌入到另一个对象(装饰器类)中(两者之间是一种组合关系),有这个对象(装饰器类)完成对象新特性的添加。如上面的装饰器UML类图所示,装饰器类原创 2015-11-20 21:16:03 · 3160 阅读 · 2 评论 -
设计模式C++实现——工厂模式
工厂模式属于创建型模式,主要可分为三类,简单工厂、工厂方法、抽象工厂。工厂模式规定,无论是工厂函数,工厂类的成员函数,返回的对象都必须位于heap。有两点需要特别注意:堆对象三种工厂模式都属于创建型模型,所创建的对象都位于堆内存中,需要手动释放其所占内存。UML类图UML类图是把握设计模式的关键,如何将一段描述转换为UML类图,如何将UML类图转换为程序语言,是软件开发的一项基本能力。更详尽的原创 2015-11-08 10:40:00 · 1602 阅读 · 0 评论