理解设计模式有两种途径,一种是看UML类图,一种是看代码理解实例,UML(一个简单的介绍)看懂了对理解设计模式大有裨益,代码容易陷进去,因此最好能找到适当且易于理解的应用场景,这下面实际上每个都是我收集的觉得讲得比较好的网址,整理一下,供自己,也供他人参考。

1.单例模式

参考:C++ Singleton (单例) 模式最优实现  多线程控制

单例模式有几大常见要点:

  • 类内部有一个无参构造函数,且为私有
  • 类提供一个接口供外部使用,接口保证只有一个类的实例
  • 类的赋值构造函数,拷贝构造函数最好显式的设置为私有,以防破坏单例性质
  • 为防止内存泄露,比较土的办法是专门声明一个函数来清理内存,一个较好的方式是声明静态的类实例,让其自动销毁。(这点与java声明内部类不同)
  • 有些版本还加上了多线程控制,虽然效率降低,但是更安全
  • C++版本有两种,一种是接口返回引用,一种是接口返回指针,返回引用比较符合用户预期,因为返回指针会造成用户怀疑是否需要自己检查指针有效性然后自己调用delete(虽然通过将析构函数私有可以保证调用的时候编译出错,但是不要误导用户为好)。
  • 如果加入多线程控制,那么可以定义一个locker类
  • 为了防止内存泄露,最好设计一个内部类。让其析构的时候自动清除内存。

2.简单工厂模式、工厂模式、抽象工厂模式

参考:工厂模式的原理介绍  工厂模式的清晰实现

常说的工厂模式有简单工厂模式,工厂模式,抽象工厂模式

有工厂,对应就有产品,工厂模式的初衷是产品不自己制造自己,而统一由工厂模式来构造。这样有两个好处:

  • 接口与实现分离,用户不用考虑类是怎么实现的,有的类实现起来很简单,有的实现起来可能比较复杂,但是用工厂模式,类实现的改动对用户是透明的
  • 清晰:工厂通常制造某一类的东西,用工厂函数来制造东西使用户对程序用途的理解更深

简单工厂模式说白了就是用户给参数告诉工厂声明什么样的产品

工厂模式是一类产品对应一个工厂,一般这个工厂只有一个工厂函数

抽象工厂模式就是将类的概念泛话,比如单核A处理器和多核A处理器可能会被认为是一类,而在工厂模式中可能不会认为是一类,因此在抽象工厂模式中可能会有更多的工厂函数。

3.桥接模式

参考:UML图及实例  C++实现

桥接模式可以减少代码耦合,减少代码量,将继承层数减少,用组合来代替。

第一个参考链接里面的UML图很形象,第二个C++实现里面讲桥接的文字描述写得很透彻。

4.适配器模式

参考:用deque仿真栈和队列的例子   完美简洁的UML图

适配器顾名思义,是转换接口用的。具体实现是将要适配的物体组合到一个类中,这个类继承了我们要获得的接口。

5.建造者模式

参考:意义理解

建造者模式这么理解,对于某物的构建,可以分部分进行,每个部门建造起来可能随着方法不同变化剧烈,但是他们组合的方法去相对稳定,那么这就比较适合建造者模式了。

目前对设计模式的理解还不足以让我记得很牢,主要原因是没有实际应用的经验,所以先总结这几个比较常见的设计模式吧,另外需要对设计模式的总体有个把关,因此有了第六条。

6.设计模式概览

设计模式知识搜集(c++)的更多相关文章

  1. `DevOps`相关知识搜集

    本文记录的是搞清楚什么是DevOps过程中检索资料时发现的有价值的帖子. 传送门: 我眼中的DevOps 作者简介:申思维,2005年本科毕业于华南理工大学计算机学院.一直从事Web领域的开发,3年多 ...

  2. Java设计模式知识整理

    1.Java设计模式     Java设计模式分为三种类型,分别是:      ①.创建型设计模式:是对对象创建过程的各种问题和解决方案的总结           包括:静态工厂模式.抽象工厂模式.单 ...

  3. Android相关小知识搜集

    adb devices得到????????????错误结果 问题: 执行adb devices后,得到如下结果:????????????        device 相关背景: AOSP:Androi ...

  4. Yii项目知识搜集

    [['rId','advertiser_id','image_file'], 'unique','targetAttribute'=>['rId','advertiser_id','image_ ...

  5. 学习Java设计模式的10条建议

    设计模式在整个Java的学习路线图中扮演着承上启下的作用. 在整个软件生命周期中,唯一不变的就是变化.设计模式就是要在软件设计.编码中对现有问题的一种总结,并从中寻求应对变化的策略. 自己初次接触设计 ...

  6. Java面向对象 Main函数 静态的应用 单例设计模式

     Java面向对象 Main函数 静态的应用与单例设计模式 知识概要             (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...

  7. java常见面试题目

    (面的初级到中级之间的,却有很多高级的问题) 总结一些常见的遇见的面试题(来自各方面收集) 1.开发中Java用了比较多的数据结构有哪些? 2.谈谈你对HashMap的理解,底层原理的基本实现,Has ...

  8. 【转】REST on Rails指南

    REST on Rails指南1:理解资源 这是来自http://www.softiesonrails.com的REST简明指南. PART I 在理解REST on Rails之前,有必要先思考一下 ...

  9. Junit4 架构设计系列(2): Runner.run()与Statement

    Overall 系列入口: Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder 前文中,我们基本理清了Junit4执行Case大体上的Flow ...

随机推荐

  1. C#服务启动以及服务指令

    Windows系统中使用 cmd 命令安装和卸载服务方法如下: 第一种方法: 1. 开始->运行->cmd 2. cd到C:\WINDOWS\Microsoft.NET\Framework ...

  2. Android 如何去除桌面上下边框暗度逐渐变暗的效果

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  3. zoj 3165 (最小割,最大点权独立集)

    胡伯涛的<最小割模型在信息学竞赛中的应用>写的真牛. 这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二 ...

  4. WebDriverExtensionsByC#

    测试工具//********************************************************************************************** ...

  5. Java 基础-运算符

    Java运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 运算符优先级 1. 算术运算符 运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4;-b -4 + 加 5+5 1 ...

  6. 无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.12.0" 的实例。

    --开启导入功能    exec sp_configure 'show advanced options',1    reconfigure    exec sp_configure 'Ad Hoc  ...

  7. 如何使用adb命令查看android中的数据库

    1,进入到控制台中,输入adb shell,进入到命令模式的环境中 2,输入:cd /data/data/ 3, 选择你所在的数据库文件,比如我的com.android.homework, 输入命令: ...

  8. LA 3983 Robotruck

    这道题感觉挺吃力的,还用到了我不熟悉的优先队列 题目中的推导也都看明白了,总之以后还要多体会才是 这里用优先对列的原因就是因为要维护一个滑动区间的最小值,比如在区间里2在1的前面,2在离开这个滑动区间 ...

  9. 一、HTML4背景知识

    前言 本教程针对已经基本熟悉HTML4基本标签的人. HTML的发展历程 HTML 1.0: 1993年6月由IETF(Internet Engineering Task Force, 互联网工程工作 ...

  10. 【转】安装Django

    原文网址:http://www.crifan.com/record_install_django/ 1.参考Quick install guide,最终找到下载的地址: http://bitnami. ...