全局唯一的实例,无法生成第二个

如 Vuex Redux 的 store、全局唯一的 dialog modal

注意:因为 JS 是单线程的,所以创建单例很简单,对于 java 等多线程语言,创建单例要考虑锁死线程问题,否则多个线程同时创建就重复了

观察者模式

如监听 DOM 事件

btn.addEventListener("click", function() {
    // ...

发布订阅模式

如自定义事件

注意:绑定事件要记得解除,防止内存泄漏

观察者模式和发布订阅模式的区别:观察者模式 subject 和 observer 直接绑定,没有中间媒介;发布订阅模式 publisher 和 observer 互不认识,需要中间媒介 event channel

装饰器模式

原功能不变,增加一些新功能

如 ES 和 TS 的 Decorator

@testable
class MyTestableClass {
  // ...
function testable(target) {
  target.isTestable = true;
MyTestableClass.isTestable // true

方法装饰器

class Person {
  @readonly
  name() { return `${this.first} ${this.last}` }

使用者不能直接访问对象,而是访问代理层,在代理层监听 get、set 做很多事情

如 ES6 Proxy 实现 vue3 响应式

var obj = new Proxy({}, {
  get: function (target, propKey, receiver) {
    console.log(`getting ${propKey}!`);
    return Reflect.get(target, propKey, receiver);
  set: function (target, propKey, value, receiver) {
    console.log(`setting ${propKey}!`);
    return Reflect.set(target, propKey, value, receiver);
					你好,欢迎来到我的个人技术博客!我是一个还有头发的程序猿,一名热衷于探索编程奥秘的程序员。在这个充满无限可能的数字时代,我致力于通过代码编织梦想,解决问题,不断追求技术的极致。  自从踏上编程之旅以来,我涉足了多个领域,包括但不限于Web开发、移动应用开发
					07-26
近几年前端技术迭代迅速,除了ES6,Vue,React,Angular,各企业级框架也层出不穷,比如egg,umi,nuxt,next,koa等等,还有redux, vuex, Mobx, Flux,dva等状态管理库,这些给前端开发工作带来了极大的简化,同时也给开发者很大的学习挑战。但是想要在前端架构层面有一定的高度,这些都是必须要掌握的。除了这些,还要掌握工程化,自动化,服务端等。那么这些类库或者框架剥离业务之后,其背后的设计思想以及遵循的底层程序原理是怎样的呢?
很多开发者对于知识的掌握
				
提到设计模式,相信知道的同学都会脱口而出,五大基本原则(SOLID)和 23 设计模式。SOLID 所指的五大基本原则分别是:单一功能原则、开放封闭原则、里式替换原则、接口隔离原则和依赖反转原则。逐字逐句诠释这五大基本原则违背了写这篇文章的初衷,引用社区大佬的理解,SOLID 可以简单概括为六个字,即“高内聚,低耦合”: 高 层模块不依赖底层模块,即为依赖反转原则。 内 部修改关闭,外部扩展开放,即为开放封闭原则。 聚 合单一功能,即为单一功能原则。 低 知识要求,对外接口简单,即为迪米特法则。