一、是什么

在软件工程中,设计模式是对软件设计中普遍存在的各种问题所提出的解决方案。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。
设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对适应变化的能力。因此,当我们遇到适合的场景时,我们可能会条件反射一样自然而然想到符合这种场景的设计模式。
比如,当系统的某个接口的结构已经无法满足我们现有的业务需求,但又不能改动这个接口,因为可能原来的系统很多功能都依赖于这个接口,改动接口会牵扯到太多的文件。因此面对这种场景,我们可以很快地想到用适配器模式来解决这个问题。

二、有哪些

常见的设计模式有:

  • 单例模式
  • 工厂模式
  • 策略模式
  • 代理模式
  • 观察者模式
  • 装饰者模式
  • 观察者模式
  • ….

    1. 单例模式

    保证一个类只有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。
    如同下面的车,只有一辆,一旦借出去则不能再借给别人:
    image.png

    2. 工厂模式

    工厂模式通常会分为3个角色:

  • 工厂角色 - 负责实现创建所有实例的内容逻辑

  • 抽象产品角色 - 是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • 具体产品角色 - 是创建目标,所有创建对象都充当这个角色的某个具体类的实例

image.png

3. 策略模式

策略模式,就是定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换。
至少分成两部分:

  • 策略类(可变),策略类封装了具体的算法,并负责具体的计算过程。
  • 环境类(不变),接受客户的请求,随后将请求委托给某个策略类。

    4. 代理模式

    代理模式,就是为对象提供一个代用品或占用符,以便控制对它的访问。
    例如实现图片懒加载的功能,先通过一张loading图占位,然后通过异步的方式加载图片,等图片加载好了再把完成的图片加载到img标签里面。

    5. 观察者模式

    通常又被称为 发布-订阅者模式消息机制,它定义了对象间的一种一对多的依赖关系,只要当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    它解决了主体对象与观察者之间功能的耦合,即一个对象状态改变给其他对象通知的问题。

    6. 装饰者模式

    装饰者模式,就是在不改变对象自身的基础上,在程序运行期间给对象动态地添加方法。
    通常运用在原有方法维持不变,在原有方法再挂载其他方法来满足现有需求。

    三、总结

    不断去学习设计模式,会对我们有着极大的帮助,主要如下:

  • 从许多优秀的软件系统中总结出的成功的、能够实现可维护性、复用的设计方案,使用这些方案将可以让我们避免做一些重复性的工作

  • 设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。
  • 大部分设计模式都兼顾了系统的可重用性和可拓展性,这使得我们可以更好地重用一些已有的设计方案、功能模块甚至一个完整的软件系统,避免我们经常做一些重复性的设计、编写一些重复代码
  • 合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统
  • 学习设计模式将有助于初学者更为深入地理解面向对象思想