这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
设计模式
定义
设计模式:是关于特定场景下解决一般设计问题的类和相互通信的对象的描述。设计模式展示了对典型性问题的普遍的、独立于领域的解决方案。
要素
- 模式名称
- 问题:应该在何时使用模式
- 解决方案:描述设计的组成部分、他们之间的相互关系及各自的职责和协作方式
- 效果:描述模式应用的效果及使用模式应权衡的问题
设计模式的分类
- 创建型:主要用于创建对象 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
- 结构型:用与处理类或者对象的组合 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
- 行为型:主要用于描述对类或对象怎样交互和资源分配职责 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
设计模式的六大原则
- 开闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口分离原则
- 迪米特原则
- 合成复用原则
具体设计模式
工厂方法模式
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
抽象工厂模式
在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。
建造者模式
在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一系列成员属性,这些成员属性中有些是引用类型的成员对象。而且在这些复杂对象中,还可能存在一些限制条件,如某些属性没有赋值则复杂对象不能作为一个完整的产品使用;有些属性的赋值必须按照某个顺序,一个属性没有赋值之前,另一个属性可能无法赋值等,为了解决这种情况,应对方式是则是使用建造者模式。
复杂产品对象相当于一辆有待建造的汽车,而对象的属性相当于汽车的部件,建造产品的过程就相当于组合部件的过程。由于组合部件的过程很复杂,因此,这些部件的组合过程往往被“外部化”到一个称作建造者的对象里,建造者返还给客户端的是一个已经建造完毕的完整产品对象,而用户无须关心该对象所包含的属性以及它们的组装方式,这就是建造者模式的模式动机。