Skip to content

xiaoweiChen/DesignPattern

 
 

Repository files navigation

Design Pattern

设计模式

简介

参考书籍 《图解设计模式》,实现各种设计模式

使用C++11实现

Build status

Linux Windows Coveralls
lin-badge win-badge cov-badge

License

License

目录

编号 类型 模式 说明
1 创建型 工厂方法模式 工厂方法模式
2 创建型 抽象工厂模式 抽象工厂模式
3 创建型 构建模式 构建模式
4 创建型 单例模式 单例模式
5 创建型 原型模式 原型模式
6 结构型 复合模式 复合模式
7 结构型 适配器模式 类适配器模式 对象适配器模式
8 结构型 装饰模式 装饰模式
9 结构型 窗口模式 窗口模式
10 结构型 轻量模式 轻量模式
11 结构型 代理模式 代理模式
12 结构型 桥接模式 桥接模式
13 行为型 迭代器模式 迭代器模式
14 行为型 模板方法模式 模板方法模式
15 行为型 策略模式 策略模式
16 行为型 访问者模式 访问者模式
17 行为型 责任链模式 责任链模式
18 行为型 仲裁者模式 仲裁者模式
19 行为型 观察者模式 观察者模式
20 行为型 备忘录模式 备忘录模式
21 行为型 状态模式 状态模式
22 行为型 命令模式 命令模式
23 行为型 解释器模式 解释器模式

总结

创建型模式

创建型模式对类的实例化过程进行抽象,将软件中对象的创建和使用分离。 为了使软件的结构更加清晰,外界对于这些对象只需要知道共同的接口,而不清楚其内部实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(what) 、由谁创建(who)、何时创建(when)等方面都为软件设计者提供了尽可能大的灵活性,隐藏了类的实例创建细节,通过隐藏对象 如何被创建和组合在一起,达到整个系统独立的目的

结构型模式

描述如何将类和对象结合在一起形成更大的结构,就像搭积木,通过简单积木的组合形成结构复杂、功能强大的结构 分为 类结构型模式 和 对象结构型模式:

  • 类结构型模式

关心类的组合,由多个类可以组合成一个更大的 系统,在类结构型模式中一般只存在继承关系和实现关系

  • 对象结构型模式

关心类与对象的组合,通过关联关系使得在一 个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。

行为型模式

对不同的对象之间划分责任和算法的抽象。 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象 之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

行为型模式分为类行为型模式和对象行为型模式两种:

  • 类行为型模式

    类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。

  • 对象行为型模式

    对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

代码结构

-code 上面"23种指针的使用方式"

Create  5种创建型

Behavior 11种行为型

Struct  7种结构型

-Template 用C++模板技巧实现的,个别能复用的设计模式

Create -> SingleTon  

单例模板,继承模板以实现复用。

c++11的static保证多线程唯一实例, c++17的inline保证创建顺序在main之前。

“双检测锁定手法”、Boost那个占位器单例、《C++设计新思维》那种“凤凰单例” 都可以被消灭。。。

懒汉模式:需要时才创建,就用static足够了。
饿汉模式:main之前创建。static inline足够了。

Behavior -> Observer

观察者模板,继承模板以复用。

联系方式:


作者 涛哥
开发理念 弘扬鲁班文化,传承工匠精神
博客 https://jaredtao.github.io/
知乎专栏 https://zhuanlan.zhihu.com/TaoQt
微信公众号 Qt进阶之路
QQ群 734623697(高质量群,只能交流技术、分享书籍、帮助解决实际问题)
邮箱 jared2020@163.com
微信 xsd2410421
QQ、TIM 759378563

QQ(TIM)、微信二维码

请放心联系我,乐于提供咨询服务,也可洽谈有偿技术支持相关事宜。

打赏

觉得分享的内容还不错, 就请作者喝杯奶茶吧~~

About

C++11全套设计模式-23种指针的用法(a full DesignPattern implement with c++11)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 86.3%
  • CMake 13.5%
  • Batchfile 0.2%