目前大家一般谈论的设计模式是面向对象开发的一些经验总结.
谈设计模式前,先总结一下面向对象的三大基石
封装 (private, protect, public) ---- 加强内聚,减少函数间的参数
继承 (:: ) ---- 消除重复代码,重载和覆盖可以减少if
多态 (virtual) ---- 是减少代码中if,switch
(lamda 编程可以减少for ,迭代器也可以减少for的使用复杂度)
设计模式的核心是消除冗余,易于维护和扩展.
主要实现方法是抽象,分解,多态.
分离功能性代码和事务性代码.
以前很大精力在写功能性代码 (即如何实现), 其实写好事务性代码同样重要.
设计模式就是写好事务性代码的一些经验总结. 有点像把问题提升到一个更高的层次来解决.
今天我们从实现手段来划分一下各种设计模式
多态 — 模板模式
接口— 策略模式
单一责任 — 命令模式
封装 — 门市模式
组合向下 — 组合模式
组合向上 — 装饰者模式
组合平级 — 桥接模式
可以用来提高性能的有 生产者/消费者模式,原型模式,享元模式,代理模式
- 工厂模式
工厂模式分为三类:简单工厂模式,一般工厂模式,抽象工厂模式。
简单工厂模式,只有一个工厂类,所有对象通过调用工厂生成。工厂类里面有一个switch case 根据不同的参数,new 出不同的对象类。
所有的对象类都是继承同一个父类。
缺点:要生产新的对象类时,需要更改工厂类。违背了开闭原则。
一般工厂模式,有多个工厂类,其继承至同一个父类,每生成一个产品调用不同的工厂类。不会违背开闭原则。
抽象工厂模式,当一个工厂里要生成多余一种产品时,一般工厂模式,就演化为抽象工厂模式了。
优缺点:增加工厂方便,增加产品不方便。
详细可见
https://www.cnblogs.com/yssjun/p/11102162.html
2.生产者消费者模式
不是建立在面向对象的基础上,是面向过程和并发设计经验总结一种设计模式。通过引入缓冲区的概念实现了,过程的解耦和等待。
详细可见
https://www.cnblogs.com/luego/p/12048857.html