设计模式总结

创建型

1.简单工厂

根据参数,如字符串、枚举等,反回创建的类。不属于Gof所说的。

2.工厂模式

抽象一层,选择一个需要的工厂,工厂有一个获取产品的方法,再从工厂取要的东西。

3.抽象工厂

对工厂抽象和产品抽象,创建一个产品族工厂,从产品族工厂中取东西。理论上每个工厂都能取到同类型的东西,但是属性不一样。

4.构建者模式

抽象一个item做衍生,以此做为产品,里面有公共的方法。使用一个builder,选装Item,把东西存起来。产品可以动态增删。

5.原型模式

使用当前已经存在的类,给予一个clone接口,用于克隆一份一样的、独立存在的类。

6.单例模式

一个对象,只有一个实例,私有创建的方法。大家共用同一个。
懒汉式,在第一次使用时才创建
饿汉式,编译构建时就创建,static成员


结构型

7.适配器模式

由底部根据需求实现匹配,自动返回适应的类型或者执行某些动作。

8.桥接模式

根据不同的上层产品,给入不同的内部数据,通过上层产品操作间接使用数据,展示的效果会不一样。

9.组合模式

把东西按关系进行划分,构成一棵树级结构。

10.装饰者模式

大家都会一个动作,但是又可以相互包装,A会画圆,B会画方,C的画画方法可以是让A、B一起来画,还可以加别的。

11.外观模式

使用一个上层包装,把多个具有某个关系的类放到一起。

12.享元模式

大家共享某部分数据,在没有的时候进行创建,下次再要这个类型时返回该值,减少创建。

13.代理模式

给一个类做一层包装,做一层扩展,做为代理人进行控制。


行为型

14.职责链模式

根据类关系,构建一条关系链,在上层需要处理数据时,可能需要和下层进行交互,可以达到相互传递,以完成处理。

15.命令模式

把需要做的事情包装成一个事件,通过一个中心控制,命令事件执行。

16.解释器模式

通过特定的功能分类,拆成一个一个解析器,使用不同的解析器去处理对应的数据,达到整体划分。

17.迭代器模式

常见于Stl中,用于高效遍历内容。

18.中介者模式

大家根据某个关系,注册在一个中心。然后都可以通过中心给的接口,查询到别人的信息和被别人找到。

19.备忘录模式

处理一个事件,在需要的时候保存一下(新建一份数据)存起来,使用者后面可以根据索引去找到这份保存的数据。

20.观察者模式

大家往一个地方注册,当发生事件时,注册了的类会收到需要的信息。参考QT信号槽。

21.状态模式

给一个物体塑造多个外表,根据需要设置外表,用该外表做为当前的状态,可随时切换。

22.策略模式

当前有一组数据,但是可以有多个处理的方法,其方法可能可以进行组合,把方法单独做为策略。组合出需要的场景。

23.模板模式

抽象一个模板,模板会有很多动作调用。实体可以选择实现某些动作,不需要的可以空实现。

24.访问者模式

每个事物关注同一个东西的角度都不同。通过元素的回调或者访问者主动查看,可以做不同的动作。

以上为Gof(Gang of Four)四人组提出的


25.pimpl

qt源码实现方式,将成员藏在cpp,不对外暴露。

26.业务代表

其中包含client、Delegate、lookup、service。使用者通过代理缓存,查找需要的服务。通过这样将业务进行分层解耦。

27.组合实体模式

组合实体太学术化了,不通俗。组合实体是个对象,是个管理者,管家,掌柜的,经理,它是直接面向客户的。组合实体下面是几个小组,也就是假如说它是个经理的话,那么它下面管理着几个小组长。小组长下面就是组员了呗,也就是真正干活的人了。所以组合实体是个层层管理的机制,并且下层的生命周期决定于上层的生命周期。就这么简单。我想它的作用只不过是简化了每一环的复杂程度而已。

https://www.it610.com/article/1177358433989488640.htm

28.过滤器模式

字面意思,通过一个过滤器,把输入的数据过滤掉不合理的,然后得到结果。

29.空模式

对于不些不合理的数据,给予一个空的对象,而不是空值。

30.mvc

model,存数据,更新时告诉C,view将数据做显示,controller作为中间传递数据和中间处理的一方。Qt中是MVD D是代理,包括C的功能,还有告诉V怎么去定制和绘制。

31.数据访问对象模式

将一些不好使用的接口包装进来,通过更上一层封装,使用时更便捷。

32.前端控制器模式

通过一个前端,把请求进行汇总再分发给特定的处理器。

33.拦截过滤器模式

通过实现多个过滤器,在发生事件时,使用注册了的过滤器对事件进行处理,通过后再去做相应的操作,否则拦截。

34.服务定位器模式

根据一个中心缓存,去查找或者说定位之前使用过的东西。

35.传输对象模式

把对象打包传送与接收。