Skip to main content

README

设计模式理解

设计模式是一种在软件设计中广泛使用的解决方案或经验总结。它们是用于解决常见问题的可重用设计思想和模板。设计模式并不是一种具体的编程语言特性或语法规则,而是一种概念和思想

常见的设计模式包括单例模式、工厂模式、观察者模式、装饰器模式、策略模式等。每个设计模式都有其独特的目的和用途,可以在不同的场景中使用

"设计模式"(Design Patterns)是一种在软件工程中广泛应用的概念,它描述了常见的问题和解决方案之间的关系。设计模式是一种通用的、经过验证的解决问题的方法,它能够提高代码的可维护性、可扩展性和可重用性。

设计模式的目标是提供一套在特定上下文中使用的可重用解决方案,以解决常见的设计问题。这些模式有助于开发人员更容易理解和沟通设计,还可以减少错误和改进代码的质量。

一些常见的设计模式包括:

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
一个类只能构造出唯一实例:Redux/Vuex的store

保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象

  1. 工厂模式(Factory Pattern):用于创建对象的接口,但让子类决定实例化哪个类。
对创建对象逻辑的封装  jQuery的$(selector)

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

  • 工厂角色-负责实现创建所有实例的内部逻辑.
  • 抽象产品角色-是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • 具体产品角色-是创建目标,所有创建的对象都充当这个角色的某个具体类的实例
  1. 观察者模式(Observer Pattern)或 发布订阅模式:定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知。
当一个对象被修改时,会自动通知它的依赖对象   Redux的subscribe、Vue的双向绑定
  1. 策略模式(Strategy Pattern):定义一系列算法,将它们封装起来,并且使它们可以互相替换,从而使算法的变化独立于使用它的客户端。

策略模式,就是定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换

至少分成两部分:

  • 策略类(可变),策略类封装了具体的算法,并负责具体的计算过程
  • 环境类(不变),接受客户的请求,随后将请求委托给某一个策略类
  1. 装饰者模式(Decorator Pattern):允许对象在运行时添加新功能,而不会修改其结构。
对类的包装,动态地拓展类的功能 React高阶组件、ES7 装饰器
  1. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端希望的另一个接口,从而使原本不兼容的接口可以协同工作。
兼容新旧接口,对类的包装    封装旧API

装饰者模式的定义:在不改变对象自身的基础上,在程序运行期间给对象动态地添加方法

通常运用在原有方法维持不变,在原有方法上再挂载其他方法来满足现有需求

  1. 命令模式(Command Pattern):将请求或操作封装为对象,使得可以将客户端参数化和延迟请求、排队请求或记录请求。

  2. 状态模式(State Pattern):允许对象在其内部状态改变时改变其行为。

  3. 组合模式(Composite Pattern):将对象组合成树结构以表示部分-整体的层次结构。

  4. 模板方法模式(Template Method Pattern):定义一个算法的骨架,而将一些步骤延迟到子类中。子类可以重新定义某些步骤,而不改变算法的结构。

  5. 代理模式:控制对象的访问

事件代理、ES6的Proxy

代理模式:为对象提供一个代用品或占位符,以便控制对它的访问

例如实现图片懒加载的功能,先通过一张loading图占位,然后通过异步的方式加载图片,等图片加载好了再把完成的图片加载到img标签里面

这些设计模式有助于解决不同种类的问题,提供了通用的、经验丰富的解决方案,被广泛用于软件开发中。了解这些模式并将其应用于适当的场景可以提高代码的质量和可维护性。

设计原则

  • 单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

  • 开放封闭原则:核心的思想是软件实体(类、模块、函数等)是可扩展的、但不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

其他模式

java设计模式参考: https://www.lumin.tech/posts/

  • 建造者模式

  • 原型模式

  • 命令模式:我们把某次任务分成两个部分,一部分程序员实现绘制按钮,他们不知道按钮用来干什么,一部分程序员负责编写点击按钮后的具体行为。

  • 组合模式

  • 迭代器模式

参考:《JavaScript设计模式与开发实践》