作为一位多产的作家,我鼓励您在亚马逊上探索我的书。 请记得关注我在 Medium 上的工作以获得持续的支持。谢谢你!非常感谢您的支持!
JavaScript 设计模式对于构建健壮、可扩展和可维护的 Web 应用程序是不可或缺的。 我的经验表明,集成这些模式可以显着提高代码质量并降低复杂性。让我们来看看可以改变 JavaScript 开发的七种关键设计模式。
揭示模块模式是一种强大的技术,用于创建具有明确定义的公共和私有元素的封装代码。 这种模式允许控制功能的暴露,同时屏蔽实现细节。考虑这个例子:
<code class="language-javascript">const myModule = (function() { let privateVar = 'I am private'; function privateMethod() { console.log('This is a private method'); } function publicMethod() { console.log('This is a public method'); console.log(privateVar); privateMethod(); } return { publicMethod: publicMethod }; })(); myModule.publicMethod();</code>
该模块有效地隐藏了内部变量和方法,仅暴露publicMethod
。这可以促进更好的封装并最大限度地减少大型项目中的命名冲突。
Pub/Sub(发布者/订阅者)模式对于实现应用程序组件之间的松耦合至关重要。对象可以在没有直接依赖关系的情况下进行通信,从而提高了灵活性。 这是一个基本的实现:
<code class="language-javascript">const PubSub = { events: {}, subscribe: function(eventName, fn) { this.events[eventName] = this.events[eventName] || []; this.events[eventName].push(fn); }, publish: function(eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(fn => fn(data)); } } }; PubSub.subscribe('userLoggedIn', user => console.log(`${user} logged in`)); PubSub.publish('userLoggedIn', 'John');</code>
这种模式在大型应用程序中特别有价值,在这些应用程序中,独立组件需要响应事件而没有紧密的相互依赖性。
依赖注入是一种通过向模块提供依赖关系而不是让它们在内部创建依赖关系来反转控制的模式。这提高了可测试性和灵活性。 这是一个例子:
<code class="language-javascript">class UserService { constructor(httpClient) { this.httpClient = httpClient; } getUser(id) { return this.httpClient.get(`/users/${id}`); } } const httpClient = { get: url => fetch(url).then(response => response.json()) }; const userService = new UserService(httpClient); userService.getUser(1).then(user => console.log(user));</code>
注入 httpClient
可以轻松替换或模拟 HTTP 客户端以进行测试。
装饰器模式动态地向对象添加行为而不修改其结构。当扩展功能而无需子类化时,这是有利的。 这是一个例子:
<code class="language-javascript">function Coffee() { this.cost = function() { return 5; }; } function MilkDecorator(coffee) { const cost = coffee.cost(); coffee.cost = function() { return cost + 2; }; } function WhipDecorator(coffee) { const cost = coffee.cost(); coffee.cost = function() { return cost + 1; }; } const myCoffee = new Coffee(); MilkDecorator(myCoffee); WhipDecorator(myCoffee); console.log(myCoffee.cost()); // 8</code>
这允许在不改变 Coffee
类本身的情况下添加“牛奶”和“鞭子”。
命令模式将方法调用封装为对象。这将调用者与执行分离,从而启用撤消/重做等功能。 这是一个演示:
<code class="language-javascript">class Light { turnOn() { console.log('Light is on'); } turnOff() { console.log('Light is off'); } } class TurnOnCommand { constructor(light) { this.light = light; } execute() { this.light.turnOn(); } } // ... (rest of the code remains the same)</code>
这有利于管理和排序操作。
复合模式将对象构建为树状层次结构,允许对单个对象及其组合进行统一处理。
<code class="language-javascript">class File { constructor(name) { this.name = name; } display() { console.log(this.name); } } // ... (rest of the code remains the same)</code>
这对于表示分层数据结构很有用。
中介模式管理对象之间的通信,促进松散耦合。 这对于具有许多交互组件的复杂系统尤其有用。
有效应用这些模式需要仔细考虑应用程序的特定需求。 应避免过度使用;有时,更简单的解决方案更可取。 优先考虑干净、可读和可维护的代码。
通过实际应用,您将对这些模式的优点和局限性有深入的了解。 掌握这七种 JavaScript 设计模式可以显着增强您创建高质量、可维护软件的能力。
101 Books是一家人工智能出版社,由作家Aarav Joshi共同创立。我们的人工智能技术使出版成本保持在极低的水平——一些书籍的价格低至4 美元——让所有人都能获得高质量的信息。
在亚马逊上找到我们的书Golang Clean Code。
随时了解我们的最新版本。在亚马逊上搜索 Aarav Joshi 了解更多书籍。 使用提供的链接获取特别优惠!
探索我们的其他项目:
投资者中心 | 投资者中央西班牙语 | 投资者中德意志 | 智能生活 | 时代与回响 | 令人费解的谜团 | 印度教 | 精英开发 | JS学校
科技考拉洞察 | 时代与回响世界 | 投资者中央媒体 | 令人费解的谜团 | 科学与时代媒介 | 现代印度教
以上是稳健 Web 开发的基本 JavaScript 设计模式的详细内容。更多信息请关注PHP中文网其他相关文章!