前端进阶-设计模式
1、创建型模式创建型模式介绍的是创建对象的机制 能够提升已有代码的灵活性和可复用性。简单工厂模式工厂方法模式常用负责创建所有的实例依照不同的类型创建不同的对象优点屏蔽了对象生成的时候的复杂性产生/构建产品比较简单不需要关注内部细节只需要知道自己想要哪一种。缺点产品数量一旦特别多的时候工厂内部逻辑会比较复杂不利于理解和维护//Fruit类产品类: public interface Fruit { public void plantProcess(); } 定义三种水果ApplePearOrange: public class Apple implements Fruit{ public void plantProcess() { System.out.println(I am an Apple); } } public class Pear implements Fruit{ public void plantProcess() { System.out.println(I am a Pear); } } public class Orange implements Fruit{ public void plantProcess() { System.out.println(I am an Orange); } } //工厂类 public class FruitFactory { public static getFruit(String name) { if (Apple.equalsIgnoreCase(name)) { return new Apple(); } else if (Pear.equalsIgnoreCase(name)) { return new Pear(); } else if (Orange.equalsIgnoreCase(name)) { return new Orange(); } return null; } } //测试代码 Fruit apple FruitFactory.getFruit(Apple); apple.plantProcess(); Fruit pear FruitFactory.getFruit(Pear); pear.plantProcess(); Fruit orange FruitFactory.getFruit(Orange); orange.plantProcess();案例根据不同的用户角色如admin, editor, guest创建不同的用户操作菜单组件抽象工厂模式不常用为一个抽象类定义了基本的方法但无需指定实现根据产品类去实现。单列模式常用一个类只有一个实例 并提供一个访问该实例的全局节点。案例像 Vuex 或 Redux 这样的状态管理库其核心的store就是一个单例。像Message或Notification这样的全局提示组件通常会使用单例模式来管理它们的实例。class Single{ public static instance privite constructor(){} public static getInstance(){ if(!Single.instance){ Single.instance new single() } return Single.instance } public methods(){} } //使用 let instance Single.getInstance()原型模式不常用能够复制已有对象 而又无需使代码依赖它们所属的类生成器模式不常用分步骤一种组合的方式创建复杂对象(产品)2、结构型模式结构型模式介绍如何将对象和类组装成较大的结构 并同时保持结构的灵活和高效。适配器模式常用使接口不兼容的对象接口能够相互合作。目标对象a接口需要与对象b接口对接时存在不兼容的问题。通过某些处理操作适配器使得对象b接口适配目标对象a接口。案例跨浏览器兼容整合第三方的sdk新老代码兼容装饰器模式常用扩展目标对象中方法的功能形成新的类。在不改变原对象的基础上通过对其进行包装拓展使得原有对象可以动态具有更多功能从而满足用户的更复杂需求。桥接模式常用可将业务逻辑或一个大类或一系列紧密相关的类拆分为不同的层次结构 从而能独立地进行开发。案例如果你想要拆分或重组一个具有多重功能的庞杂类例如能与多个数据库服务器进行交互的类 可以使用桥接模式。如果你希望在几个独立维度上扩展一个类 可使用该模式。桥接建议将每个维度抽取为独立的类层次。 初始类将相关工作委派给属于对应类层次的对象 无需自己完成所有工作。代理模式不常用让你能提供真实服务对象的替代品给客户端使用。 代理接收客户端的请求并进行一些处理 访问控制和缓存等 然后再将请求传递给服务对象。案例图片预加载loading 图图片懒加载外观模式不常用基于已有的类方法封装一些新的方法创建一些新的功能3、行为模式行为模式负责对象间的高效沟通和职责委派。观察者和发布-订阅者模式必考参考观察者和发布-订阅者模式JS中观察者模式与发布订阅模式关于观察者模式与发布/订阅模式不少大神都有帖子对他们做出了解释但是很多文章都将两者混在 - 掘金在观察者模式中订阅者和观察者是同一个类它整个模式只有发布者观察者事件总线事件中心订阅eventHub.$on(方法名function(接收数据的参数){用该组件的数据接收传递过来的数据})发布eventHub.$emit(方法名传递的数据)取消发布eventHub.$off(方法名函数名称)取消订阅要给函数一个名字不能为匿名函数ts的规范写法 export class EventBusT any { // 定义一个事件中心[事件名订阅者[],] private listeners new Mapstring, Setany(); //private anyListeners new Setany(); //发布 $emit (eventName: string, ...args: T[]) { const listeners this.listeners.get(eventName) if (!listeners) { return } listeners.forEach((listener) { listener(...args) }) //this.anyListeners.forEach((listener) { // listener(eventName, ...args) //}) } 订阅 $on (eventName: string, func: any) { if (!this.listeners.has(eventName)) { this.listeners.set(eventName, new Set()) } // 通过键名获取到的是对应的值订阅一个事件即为该事件名对应的set对象添加一个订阅者 const listeners this.listeners.get(eventName) listeners!.add(func) } // onAny (func: any) { // this.anyListeners.add(func) // } $off (eventName: string, func: any) { const listeners this.listeners.get(eventName) listeners.delete(func) } }vue2双向数据绑定组成观察者Observer用来劫持并监听所有属性如果有变动的就通知订阅者如果有获取就添加订阅者。订阅器含有一个订阅者列表及通知订阅者更新的函数订阅者Watcher(这么理解观看的就是订阅者吧): 每一个Watcher都绑定一个更新函数watcher可以收到属性的变化通知并执行相应的函数从而更新视图。编译器Compile可以扫描和解析每个节点的相关指令v-modelv-on等指令如果节点存在v-modelv-on等指令则解析器Compile初始化这类节点的模板数据使之可以显示在视图上然后初始化相应的订阅者Watcher。关系说明基础版思想数据劫持发布订阅者模式数据劫持当将一个普通js的对象作为vue实例的data项vue将遍历此对象的所有property并通过Object.defineProperty的getter,setter将所有的key进行劫持。关系说明每一个key都对应一个setter(),getter()函数和订阅器dep实例get函数:当key的获取函数getter()被触发时就会创建一个watcher实例存储到订阅器dep实例的数组中。set 函数:当key的修改函数setter()被触发时就会触发订阅器dep中的notify函数通知所有依赖该key的组件订阅者进行更新,通知组件实例更新。订阅器dep实例中有个subs[]数组中存放着所有依赖该key订阅者及notify函数进阶版利用Object.defineProperty的get和set进行数据劫持利用observe遍历data数据来进行监听并为数据创建dep实例来收集依赖利用Compile对dom中的所有节点进行编译并为组件添加wathcer实例通过depwatcher发布订阅模式实现数据与视图同步策略模式常用具体它将一组行为转换为对象 并使其在原始上下文对象内部能够相互替换命令模式职责链责任链模式状态模式访问者模式迭代器模式

相关新闻

口碑好的车用油复合剂服务商

口碑好的车用油复合剂服务商

对于润滑油调合厂、车用油品牌商的采购团队而言,筛选车用油复合剂服务商的核心诉求从来不是“价格最低”,而是配方达标、批次稳定、交付及时、能配合定制调整——毕竟一旦供应商掉链子,轻则整批成品油不合格返工,重则丢失长期客户…

2026/7/30 10:47:46阅读更多 →
VLAN划分方式全解析:从端口到策略的网络隔离实战指南

VLAN划分方式全解析:从端口到策略的网络隔离实战指南

1. VLAN划分方式概览:从基础到进阶的网络隔离艺术 在任何一个规模稍大的企业或园区网络中,广播风暴都是一个让人头疼的问题。想象一下,成百上千台设备在同一个广播域里“喊话”,不仅网络效率低下,安全也毫无保障。这时…

2026/7/30 10:45:46阅读更多 →
Pandas DataFrame与Python字典互转:核心参数、场景与性能优化

Pandas DataFrame与Python字典互转:核心参数、场景与性能优化

1. 项目概述:为什么DataFrame和Dict的转换是数据处理的“咽喉要道” 干了这么多年数据分析,我越来越觉得,数据处理流程里最不起眼、却又最频繁出幺蛾子的环节,往往就是数据在不同格式间的“翻译”工作。今天咱们要聊的&#xff0c…

2026/7/30 10:45:46阅读更多 →
5分钟快速上手Pure Admin Thin:超轻量Vue3后台管理系统框架

5分钟快速上手Pure Admin Thin:超轻量Vue3后台管理系统框架

5分钟快速上手Pure Admin Thin:超轻量Vue3后台管理系统框架 【免费下载链接】pure-admin-thin vue-pure-admin官方精简版 项目地址: https://gitcode.com/gh_mirrors/pu/pure-admin-thin Pure Admin Thin是基于Vue 3和Element Plus构建的超轻量级后台管理系统…

2026/7/30 11:52:02阅读更多 →
专业级微信公众号数据采集工具:wechat_articles_spider深度解析与实战指南

专业级微信公众号数据采集工具:wechat_articles_spider深度解析与实战指南

专业级微信公众号数据采集工具:wechat_articles_spider深度解析与实战指南 【免费下载链接】wechat_articles_spider 微信公众号文章的爬虫 项目地址: https://gitcode.com/gh_mirrors/we/wechat_articles_spider 在当今内容驱动的数字时代,微信公…

2026/7/30 11:52:02阅读更多 →
学术论文审稿回复:从沟通策略到实战技巧的完整指南

学术论文审稿回复:从沟通策略到实战技巧的完整指南

1. 项目概述:从“套话”到“有效沟通”的学术生存术 “回复审稿人的套话”,这个标题乍一看,似乎是在寻找一种可以应付差事的、标准化的“话术模板”。但作为一名经历过数十次投稿、审稿和修改轮回的科研从业者,我深知这背后远非“…

2026/7/30 11:52:02阅读更多 →
中兴光猫配置解密终极指南:5分钟掌握配置文件加解密技巧

中兴光猫配置解密终极指南:5分钟掌握配置文件加解密技巧

中兴光猫配置解密终极指南:5分钟掌握配置文件加解密技巧 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 中兴光猫配置解密是许多网络管理员和家庭用户面临的常…

2026/7/30 11:52:02阅读更多 →
FPGA波形发生器设计:Verilog实现与Quartus仿真全流程解析

FPGA波形发生器设计:Verilog实现与Quartus仿真全流程解析

1. 项目概述与核心价值最近在整理一些FPGA的练手项目,发现一个非常经典且能串联起多个核心知识点的选题:用Verilog在FPGA上实现一个波形信号发生器,并用Quartus完成仿真验证。这听起来像是数字电路课的实验,但真正动手做下来&…

2026/7/30 11:52:02阅读更多 →
2026年施工管理软件测评:5款主流工具对比,哪款更适合你?

2026年施工管理软件测评:5款主流工具对比,哪款更适合你?

工程项目越来越复杂,利润却越压越薄。靠微信群、Excel和纸质单据管项目的日子,正在让一批施工企业付出真金白银的代价。于是,“上一套施工管理软件”成了老板们达成共识的事。可打开搜索,广联达、用友、新中大……名字都听过&…

2026/7/30 11:50:02阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →