前端八股文文档汇总
分享
设计模式(10题) 副本
输入“/”快速插入内容
设计模式(10题) 副本
用户9452
用户9452
4月21日修改
问题 1:什么是单例模式(Singleton Pattern)?它在前端开发中的典型应用场景是什么?
答案:
单例模式是一种确保一个类只有一个实例,并提供一个全局访问点的设计模式。无论该类被实例化多少次,返回的都是同一个对象。
前端应用场景:
•
全局状态管理:
像 Vuex 或 Redux 这样的状态管理库,其核心的
store
就是一个单例。整个应用程序中只有一个
store
实例,用于存储和管理所有组件共享的状态,确保了状态的一致性。
•
全局配置对象:
应用程序的配置信息(如 API 地址、主题设置、功能开关等)可以被封装在一个单例对象中,方便在任何地方读取和修改,且保持唯一。
•
UI组件库的实例管理:
像
Message
或
Notification
这样的全局提示组件,通常会使用单例模式来管理它们的实例。这样可以确保在任何时刻屏幕上只有一个或一组统一管理的提示框,避免了多个实例重叠或冲突。
问题 2:请解释一下工厂模式(Factory Pattern),并举一个在前端中应用的例子。
答案:
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需向客户端暴露创建逻辑。它定义一个用于创建对象的接口,让子类决定实例化哪一个类。
前端应用例子:
假设你需要根据不同的用户角色(如'admin', 'editor', 'guest')创建不同的用户操作菜单组件。你可以创建一个菜单工厂函数:
代码块
JavaScript
function createMenu(role) {
switch (role) {
case 'admin':
return new AdminMenu(); // 返回管理员菜单组件
case 'editor':
return new EditorMenu(); // 返回编辑者菜单组件
default:
return new GuestMenu(); // 返回访客菜单组件
}
}
const userMenu = createMenu(currentUser.role);
这样,创建具体菜单的逻辑被封装在工厂函数中,调用者只需关心传入正确的角色即可,代码更易于维护和扩展。
问题 3:观察者模式(Observer Pattern)和发布-订阅模式(Publish-Subscribe Pattern)有什么区别?
答案:
两者都用于处理对象间的解耦和消息传递,但存在一个关键区别:
•
观察者模式:
观察者(Observer)直接订阅主题(Subject),并维护在主题的订阅者列表中。当主题状态变化时,它会直接通知所有观察者。这是一个紧耦合的关系,主题直接知道它的观察者。
•
发布-订阅模式:
发布者(Publisher)和订阅者(Subscriber)之间是完全解耦的,它们不直接交互。它们通过一个中心的事件总线(Event Bus / Broker)进行通信。发布者向总线发布事件,而订阅者向总线订阅事件。发布者不知道谁是订阅者,反之亦然。
简单来说:
发布-订阅模式多了一个“中间商”(事件总线),实现了更彻底的解耦。DOM事件监听(
addEventListener
)更接近观察者模式,而像 Vue.js 中的
$on
和
$emit
或 Node.js 的
EventEmitter
则属于发布-订阅模式。