设计模式概述(一)| 青训营笔记

88 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

设计模式

定义

设计模式:是关于特定场景下解决一般设计问题的类和相互通信的对象的描述。设计模式展示了对典型性问题的普遍的、独立于领域的解决方案。

要素

  • 模式名称
  • 问题:应该在何时使用模式
  • 解决方案:描述设计的组成部分、他们之间的相互关系及各自的职责和协作方式
  • 效果:描述模式应用的效果及使用模式应权衡的问题

设计模式的分类

  1. 创建型:主要用于创建对象 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
  2. 结构型:用与处理类或者对象的组合 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
  3. 行为型:主要用于描述对类或对象怎样交互和资源分配职责 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

设计模式的六大原则

  1. 开闭原则
  2. 里氏替换原则
  3. 依赖倒置原则
  4. 接口分离原则
  5. 迪米特原则
  6. 合成复用原则

具体设计模式

工厂方法模式

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

抽象工厂模式

在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。

建造者模式

在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一系列成员属性,这些成员属性中有些是引用类型的成员对象。而且在这些复杂对象中,还可能存在一些限制条件,如某些属性没有赋值则复杂对象不能作为一个完整的产品使用;有些属性的赋值必须按照某个顺序,一个属性没有赋值之前,另一个属性可能无法赋值等,为了解决这种情况,应对方式是则是使用建造者模式。

复杂产品对象相当于一辆有待建造的汽车,而对象的属性相当于汽车的部件,建造产品的过程就相当于组合部件的过程。由于组合部件的过程很复杂,因此,这些部件的组合过程往往被“外部化”到一个称作建造者的对象里,建造者返还给客户端的是一个已经建造完毕的完整产品对象,而用户无须关心该对象所包含的属性以及它们的组装方式,这就是建造者模式的模式动机。