常见的JavaScript设计模式(一)

常见的JavaScript设计模式

  • [一、模块模式(Module Pattern)](#一、模块模式(Module Pattern))
  • [二、单例模式(SingIeton Pattern)](#二、单例模式(SingIeton Pattern))
  • [三、工厂模式(Factory Pattern)](#三、工厂模式(Factory Pattern))
  • [四、观察者模式(Observer Pattern)](#四、观察者模式(Observer Pattern))

常见的JavaScript设计模式包括 模块模式、 在这里插入代码片 单例模式、 工厂模式、 观察者模式、策略模式、装饰者模式等。每种设计模式都有其特定的和应用场景和解决方案,可以根据具体的需求选择合适的设计模式来提高代码的质量和可维护性。

一、模块模式(Module Pattern)

用于将代码封装为具有特定功能的独立模块。

javascript 复制代码
const myModule=(function () {
  let privateVarible="This is private";
  function privateMethod() {
    console.log(privateVarible);
  }
  return {
    publicMethod(){
      privateMethod();
    },
  };
})();

二、单例模式(SingIeton Pattern)

确保一个类只有一个实例,并提供全局访问点来访问该实例。

javascript 复制代码
const singleton = (function () {
  let instance;
  function creatInstance() {
    return {
      name: 'Singleton Instance',
    };
  }
  return {
    getInstance() {
      if (!instance) {
        instance = creatInstance();
      }
      return instance;
    },
  };
})();

const instance1 = singleton.getInstance();
const instance2 = singleton.getInstance();
console.log(instance1 === instance2);

三、工厂模式(Factory Pattern)

提供了一种封装对象创建过程的方式,使得客户端代码与具体对象的创建逻辑解耦。

javascript 复制代码
function createUser(name,role) {
  return {
    name,
    role,
    sayHello(){
      console.log(`name is ${this.name} and I am a ${this.role}`);
    }
  }
}

const admain = createUser("Alice","admain");
admain.sayHello();

四、观察者模式(Observer Pattern)

观察者模式是一种对象间的对多的依赖关系,当一个对象的状态发生变化时,它的所有依赖对象都会收到通知并自动更新。

javascript 复制代码
function Subject() {
  this.observers = [];
}
Subject.prototype = {
  // 订阅
  subscribe(observer) {
    this.observers.push(observer);
  },
  // 取消订阅
  unsubscribe(observer) {
    this.observers = this.observers.filter((obs) => objs !== observer);
  },
  // 通知
  notify(data) {
    this.observers.forEach((observer) => observer.update(data));
  },
};
// 观察者
function Observer(name) {
  this.name = name;
}
Observer.prototype.update = function (data) {
  console.log(`${this.name} received data: ${data}`);
};

const subject = new Subject();
const observer1 = new Observer('observer1');
const observer2 = new Observer('observer2');
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.notify('New data availabel');
相关推荐
前端摸鱼匠19 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
学嵌入式的小杨同学19 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
sleeppingfrog20 小时前
zebra通过zpl语言实现中文打印(二)
javascript
Re.不晚20 小时前
Java入门17——异常
java·开发语言
精彩极了吧20 小时前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
南极星100521 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言
未来之窗软件服务21 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
baidu_2474386121 小时前
Android ViewModel定时任务
android·开发语言·javascript
Dev7z21 小时前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
不能隔夜的咖喱21 小时前
牛客网刷题(2)
java·开发语言·算法