装饰者模式通过包装对象动态扩展功能而不修改原对象。如用addRecorder增强phone的call方法,添加录音功能;或用cacheDecorator为fibonacci函数增加缓存,实现性能优化,符合开放封闭原则。

装饰者模式(Decorator Pattern)是一种结构型设计模式,它的核心作用是在不修改原有对象的基础上,动态地给对象添加新的功能或行为。这种模式在 JavaScript 中非常实用,因为它符合开放封闭原则——对扩展开放,对修改封闭。
装饰者模式的基本思想
你可以把一个基础对象想象成一个普通的咖啡,然后通过“装饰”来不断添加牛奶、糖、巧克力等配料。每一步都不会改变原始的咖啡对象,而是生成一个新的、功能更丰富的对象。
在 JavaScript 中,装饰者模式通常通过包装原对象或函数,扩展其方法或属性,而不影响原始实现。
JavaScript 中的实现方式
下面是一个简单的例子,展示如何用装饰者模式增强一个对象的方法:
// 原始对象const phone = { call: function() { console.log("打电话"); }};// 装饰者:给手机增加录音功能function addRecorder(obj) {const originCall = obj.call; // 保存原方法obj.call = function() {console.log("开始录音...");originCall.apply(this, arguments); // 调用原方法console.log("结束录音");};return obj;}
// 使用装饰者const decoratedPhone = addRecorder(phone);decoratedPhone.call();// 输出:// 开始录音...// 打电话// 结束录音
在这个例子中,addRecorder 就是一个装饰者函数,它没有修改 phone 的原始代码,而是增强了它的 call 方法。
GAIPPT
AI PPT制作和美化神器
1215 查看详情
实际应用场景
日志记录:在不修改原函数的情况下,记录函数调用信息。权限控制:在执行某个操作前检查用户权限。缓存增强:为耗时计算函数添加缓存机制。兼容性处理:为老接口添加新特性支持。
比如,为一个计算函数添加缓存装饰:
function cacheDecorator(fn) { const cache = new Map(); return function(...args) { const key = JSON.stringify(args); if (cache.has(key)) { console.log("命中缓存"); return cache.get(key); } const result = fn.apply(this, args); cache.set(key, result); return result; };}function fibonacci(n) {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);}
const cachedFibonacci = cacheDecorator(fibonacci);
这样,cachedFibonacci 在保留原逻辑的同时,拥有了缓存能力。
基本上就这些。装饰者模式让你可以像搭积木一样灵活扩展功能,特别适合需要组合多种行为的场景。
以上就是js装饰者模式是什么的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/765564.html
微信扫一扫
支付宝扫一扫