设计模式_JS实现与应用


单例模式确保一个类仅有一个实例并提供全局访问点,适用于配置管理等场景;工厂模式封装对象创建逻辑,实现创建与使用的解耦;观察者模式建立一对多依赖,状态变化时自动通知所有观察者,广泛用于事件系统和响应式框架;装饰器模式通过高阶函数或语法动态扩展功能,适合日志、权限等横切逻辑;策略模式将算法封装为可互换的策略对象,便于灵活切换行为,如表单验证或多算法选择。J*aScript的灵活性使这些模式实现更简洁高效。

设计模式_js实现与应用

设计模式是软件开发中常见问题的可复用解决方案。在J*aScript中,由于其灵活的语言特性(如函数是一等公民、动态类型、原型继承等),许多经典的设计模式可以以更简洁或不同的方式实现。下面介绍几种常用的设计模式及其在JS中的实现与应用场景。

1. 单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。

在J*aScript中,可以通过闭包或模块模式来实现单例:

const Singleton = (function () {
  let instance;

  function createInstance() {
    return { name: 'I am the only instance' };
  }

  return {
    getInstance: function () {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    }
  };
})();

// 使用
const obj1 = Singleton.getInstance();
const obj2 = Singleton.getInstance();
console.log(obj1 === obj2); // true

适用于:配置管理、日志记录器、全局状态管理等需要唯一实例的场景。

2. 工厂模式(Factory Pattern)

工厂模式用于创建对象,而无需指定具体的类。它将对象的创建逻辑封装起来。

function AnimalFactory(type) {
  if (type === 'dog') {
    return {
      speak: () => console.log('Woof!')
    };
  } else if (type === 'cat') {
    return {
      speak: () => console.log('Meow!')
    };
  }
}

// 使用
const dog = AnimalFactory('dog');
const cat = AnimalFactory('cat');
dog.speak(); // Woof!
cat.speak(); // Meow!

适用于:需要根据条件创建不同对象类型,且希望解耦创建逻辑与使用逻辑的情况。

3. 观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知。

在前端开发中,这种模式广泛应用于事件系统和响应式数据绑定。

45°C商城系统 45°C商城系统

系统介绍 45°C 商城系统,以 Thinkphp5.0 + Uniapp + Layui2.9 + Vue 为技术基石,精心打造出的全新 MINI 商城应用。其功能覆盖全面,无论是 PC 商城、H5 商城,还是公众号商城、微信小程序以及抖音小程序的制作都能完美胜任。采用标准系统结合插件模式开发,用户能够极为便捷地定制专属的个性模块。整个系统,从程序设计到 UI 呈现,都秉持着一贯的小而美理念。程

45°C商城系统 0 查看详情 45°C商城系统
class Subject {
  constructor() {
    this.observers = [];
  }

  subscribe(observer) {
    this.observers.push(observer);
  }

  unsubscribe(observer) {
    this.observers = this.observers.filter(obs => obs !== observer);
  }

  notify(data) {
    this.observers.forEach(observer => observer.update(data));
  }
}

class Observer {
  update(data) {
    console.log('Received:', data);
  }
}

// 使用
const subject = new Subject();
const obs1 = new Observer();
const obs2 = new Observer();

subject.subscribe(obs1);
subject.subscribe(obs2);
subject.notify('Hello Observers!'); // 两个观察者都会收到消息

适用于:事件总线、发布/订阅系统、Vue或React中的响应式更新机制。

4. 装饰器模式(Decorator Pattern)

装饰器模式允许在不修改原有对象的基础上,动态地扩展其功能。

J*aScript中可以通过高阶函数或ESNext的装饰器语法(需编译支持)实现。

function logDecorator(fn) {
  return function (...args) {
    console.log(`Calling ${fn.name} with`, args);
    const result = fn.apply(this, args);
    console.log(`Result: ${result}`);
    return result;
  };
}

function add(a, b) {
  return a + b;
}

const loggedAdd = logDecorator(add);
loggedAdd(2, 3); 
// 输出:
// Calling add with [2, 3]
// Result: 5

适用于:日志记录、权限校验、性能监控等横切关注点的增强。

5. 策略模式(Strategy Pattern)

策略模式将算法或行为封装成独立的策略对象,使它们可以互换使用。

const strategies = {
  'fast': () => console.log('Running fast strategy'),
  'slow': () => console.log('Running slow strategy'),
  'balanced': () => console.log('Running balanced strategy')
};

function runStrategy(name) {
  if (strategies[name]) {
    strategies[name]();
  } else {
    console.log('Unknown strategy');
  }
}

// 使用
runStrategy('fast');     // Running fast strategy
runStrategy('balanced'); // Running balanced strategy

适用于:表单验证、动画效果选择、算法切换等需要灵活替换逻辑的场景。

基本上就这些。J*aScript凭借其灵活性,让设计模式的实现更加轻量和直观。理解这些模式的核心思想比死记硬背更重要,合理运用能显著提升代码的可维护性和扩展性。

以上就是设计模式_JS实现与应用的详细内容,更多请关注其它相关文章!


# 高阶  # 济源抖音seo价格  # 萧山区企业网站优化平台  # 网站优化信息文案模板  # 如何找到网站建设客户  # 商水网站建设优化  # 石景山做网站建设  # 宝岛饲料网站建设方案  # 平谷网站建设推广  # 推广营销方案简单  # 资阳网站推广外包  # 基础上  # 死记硬背  # 横切  # 记录器  # 配置管理  # vue  # 服务端  # 可以通过  # 表单  # 适用于  # speak  # 常见问题  # 软件开发  # 前端开发  # app  # 前端  # js  # java  # javascript  # react 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 微信客户端怎么查看二维码_微信客户端个人二维码查看方法  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  微信网页版在线登录 微信网页版在线使用入口  易车网官网直达入口 易车网在线登录入口  如何查询个人病历记录  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  百度网盘网页入口链接分享 百度网盘官网入口网页登录  Python中处理嵌套字典与列表的数据提取与过滤教程  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  TikTok视频播放中断怎么办 TikTok播放异常修复方法  精通VS Code多光标编辑以实现闪电般快速的修改  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  C++ switch case字符串_C++如何实现字符串switch匹配  网站体验不好=浪费钱:如何提升-用户体验效果差  J*aScript字符串_Unicode处理  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  在Django中动态检查模型关联:一种灵活的解决方案  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  解决VS Code中Python版本冲突与输出异常的指南  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  红手指专业版app注册教程  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  晓晓优选app支付宝绑定方法  《蓝色星原:旅谣》坐骑获取攻略  抖音号升级成企业资质怎么弄?有什么好处?  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  php如何实现多域名共享session_php存储session到redis与跨域读取配置  Linux如何开发轻量级数据服务模块_Linux服务化设计  个人所得税办理入口 个人所得税综合所得年度汇算入口  《异星探险家》古怪的物品作用介绍  PDF文件去水印平台入口 PDF水印删除网址  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  深入理解J*aScript异步操作:setTimeout与调用栈的真相  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  优化 WooCommerce 产品价格显示与自定义短代码集成  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制 

 2025-11-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.