JavaScript设计模式 -- 外观模式

外观模式(Facade Pattern)是一种设计模式,用于为复杂的子系统提供一个简单的接口,以减少子系统间的依赖和复杂性。在 JavaScript 中实现外观模式,通常是为了提供一个统一的接口来简化客户端与多个子系统交互的过程。

外观模式的优点

简化接口:通过单一的接口隐藏了系统的复杂性,使得客户端使用更加简单。

减少依赖:降低了客户端与子系统之间的耦合度,因为客户端不需要直接与子系统交互。

提高安全性:可以在外观中加入访问控制,限制客户端对子系统的直接访问。

外观模式的结构

外观模式通常包含以下几个角色:

Facade(外观角色):为多个子系统对外提供一个共同的接口。

Subsystem(子系统角色):一系列紧密相关的类的集合,它们共同完成了一个特定的功能。

示例实现

假设我们有一个复杂的系统,包括一个灯光控制模块、一个空调控制模块和一个电视控制模块,我们可以创建一个外观类来简化这些模块的交互。

  1. 定义子系统

class Light {

turnOn() {

console.log("Light is on");

}

turnOff() {

console.log("Light is off");

}

}

class AirConditioner {

setTemperature(temp) {

console.log(`Air conditioner temperature set to ${temp}`);

}

}

class TV {

turnOn() {

console.log("TV is on");

}

turnOff() {

console.log("TV is off");

}

setChannel(channel) {

console.log(`TV channel set to ${channel}`);

}

}

  1. 创建外观类

class HomeAutomationFacade {

constructor() {

this.light = new Light();

this.airConditioner = new AirConditioner();

this.tv = new TV();

}

watchTV() {

this.tv.turnOn();

this.tv.setChannel(10); // 假设我们想看第10频道新闻。

console.log("Ready to watch TV");

}

sleep() {

this.tv.turnOff();

this.light.turnOff();

this.airConditioner.setTemperature(25); // 假设我们想设置空调温度为25度。

console.log("Preparing for sleep");

}

}

  1. 使用外观类

const facade = new HomeAutomationFacade();

facade.watchTV(); // 使用外观类简化操作电视的过程。

facade.sleep(); // 使用外观类简化准备睡觉的过程。

通过这种方式,客户端代码只需要与 HomeAutomationFacade 类交互,而不需要直接与 Light、AirConditioner 和 TV 类交互,从而简化了客户端代码并降低了系统的耦合度。这就是外观模式在 JavaScript 中的典型应用。

相关推荐
A接拉起00710 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
_馒头10 小时前
pixiJs游戏开发实践 - 跳棋小游戏
javascript·vue.js
三*一10 小时前
优化修整算法
前端·javascript·算法
楠楠子呀11 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
半个落月12 小时前
LangGraph.js 实战:从状态图到分支、循环、检查点与人工中断
javascript·人工智能·langchain
默_笙14 小时前
🧀 让大模型的答案"流"出来:NestJS AI 模块 + SSE + RxJS 实战
javascript·人工智能
mbshqqb14 小时前
TypeScript基础教程之同步生成器
前端·javascript·typescript
尤水就下15 小时前
🔥预热:在线文档的 block 架构是如何实现的(未完待续...)
前端·javascript·架构
全栈项目管理程序猿15 小时前
ArcGIS JS 基础教程(29):CSVLayer 表格点位图层
前端·javascript
骑着蜗牛撵大象32716 小时前
豆包 Seed 驱动的记账智能体:从拍票抽取到月报生成的全链路落地记录
java·前端·javascript·结构化输出·豆包seed·多模态识别·记账系统