设计模式
文章平均质量分 78
liangshanbo1215
这个作者很懒,什么都没留下…
展开
-
语义版本控制
在软件管理领域,存在一个令人生畏的地方,叫做“依赖地狱”。你的系统越大,你整合到软件中的软件包越多,你就越有可能在某一天发现自己陷入这个绝望的境地。在具有许多依赖项的系统中,发布新软件包版本可能会迅速变成一场噩梦。如果依赖项规范过于严格,那么您将面临版本锁定(无法升级软件包而无需发布每个依赖项软件包的新版本)的危险。如果指定的依赖项过于宽松,那么您将不可避免地受到版本滥用的困扰(假设与未来版本的兼容性比实际情况要合理得多)。当版本锁定和/或版本滥用阻止您轻松安全地推进项目时,您就会陷入依赖地狱。原创 2024-04-09 19:25:44 · 1125 阅读 · 0 评论 -
设计模式 - 代理模式
使用代理对象,我们可以对与某些对象的交互进行更多的控制。代理对象可以在我们与对象进行交互时确定其行为,例如,当我们获取值或设置值时。一般来说,代理是指代替他人的人。你不是直接和那个人说话,而是和代表你试图联系的人说话的代理。在JavaScript中也是如此:我们不是直接与目标对象交互,而是与Proxy对象交互。让我们创建一个代表约翰·多伊的人物对象。我们不想直接与这个对象交互,而是想与代理对象交互。在 JavaScript 中,我们可以通过创建一个新的Proxy实例来轻松创建新的代理。原创 2024-04-06 06:00:00 · 1490 阅读 · 0 评论 -
设计模式 - Provider 模式
在某些情况下,我们希望为应用程序中的许多(如果不是全部)组件提供数据。尽管我们可以使用props将数据传递给组件,但如果应用程序中的几乎所有组件都需要访问 prop 的值,这可能很难做到。我们经常遇到所谓的属性钻探(prop drilling)问题,这在我们将属性向下传递至组件树的深层时就会出现。重构依赖属性的代码几乎不可能,也很难知道某些数据来自哪里。假设我们有一个包含某些数据的App组件。在组件树的下方,我们有一个ListItemHeader和Text组件,它们都需要这些数据。原创 2024-03-29 14:54:05 · 1081 阅读 · 0 评论 -
设计模式 - 观察者模式
通过观察者模式,我们可以订阅某些对象(即观察者)到另一个对象(称为被观察者)。每当事件发生时,被观察者会通知其所有观察者!observersnotify()让我们来创建一个 Observable!创建 Observable 的一种简单方法是通过使用 ES6 类。现在,我们可以使用 subscribe 方法将观察者添加到观察者列表中,使用 unsubscribe 方法删除观察者,并使用 notify 方法通知所有订阅者。让我们用这个可观察对象构建一些东西。Button和一个我们希望跟踪用户与应用程序的。原创 2024-04-04 09:00:00 · 1588 阅读 · 0 评论 -
设计模式 - 模块模式
随着应用程序和代码库的增长,保持代码的可维护性和独立性变得越来越重要。模块模式允许您将代码拆分为更小的、可重用的部分。除了能够将代码拆分为更小的可重用部分外,模块还允许您将文件中的某些值保密。默认情况下,模块中的声明的作用域(封装)为该模块。如果我们不显式导出某个值,则该值在该模块之外不可用。这样可以降低在代码库的其他部分中声明的值发生名称冲突的风险,因为这些值在全局范围内不可用。原创 2024-04-03 06:00:00 · 597 阅读 · 0 评论 -
设计模式 - Mixin模式
混入(Mixin)是一个对象,我们可以使用它来向另一个对象或类添加可重用的功能,而无需使用继承。我们无法独立使用混入,它的唯一目的是向对象或类添加功能,而不使用继承。比如说,在我们的应用程序中,我们需要创建多个狗。然而,我们创建的狗的基本类型没有任何属性,只有一个名字属性。狗不仅仅应该有一个名字,它还应该能够叫、摇尾巴和玩耍!我们不必直接在Dog类中添加这些行为,而是可以创建一个混入(mixin)来为我们提供叫、摇尾巴和玩耍的属性。我们可以使用方法将mixin 添加到Dog原型中。此方法允许我们向。原创 2024-04-02 05:00:00 · 402 阅读 · 0 评论 -
设计模式 - 中介器模式
中介者模式使得组件通过一个中心点——中介者进行交互。组件不需要直接进行通信,而是将请求发送给中介者,由中介者进行转发!在JavaScript中,中介者往往只是一个对象字面量或一个函数。你可以将这种模式与空中交通管制员和飞行员之间的关系进行比较。飞行员不是直接互相交谈,这可能会相当混乱,而是与空中交通管制员交谈。空中交通管制员确保所有飞机接收到他们所需的信息,以便安全飞行,不与其他飞机相撞。虽然我们希望不要使用 JavaScript 控制飞机,但我们往往不得不处理对象之间的多向数据。原创 2024-04-01 07:00:00 · 1043 阅读 · 0 评论 -
设计模式 - 享元模式
享元模式是一种结构型设计模式,旨在最大程度地减少系统中对象的数量,通过共享相同状态的对象来减少内存占用和提高性能。在享元模式中,对象分为内部状态和外部状态,内部状态是可以共享的,而外部状态则是每个对象独立拥有的。当我们创建大量相似对象时,通过享元模式,可以有效地优化系统性能,减少内存占用,提高系统的扩展性和灵活性。如果一本书具有相同的 ISBN 编号,因此是完全相同的图书类型,我们不希望创建一个全新的。如果完全相同的书籍有多个副本,那么每次创建一个新的书籍实例都不是很有用。数组,其中包含库中的书籍总数。原创 2024-03-31 10:30:00 · 366 阅读 · 0 评论 -
设计模式 - 工厂模式
使用工厂模式,我们可以使用工厂函数来创建新对象。如果一个函数不使用 new 关键字就返回一个新对象,那么这个函数就是工厂函数!假设我们的应用程序需要许多用户。我们可以使用firstNamelastName和email属性创建新用户。工厂函数还会向新创建的对象添加fullName属性,该属性返回firstName和lastName。现在,我们可以通过调用createUser函数轻松创建多个用户。如果我们在创建相对复杂且可配置的对象时,工厂模式会很有用。可能存在键和值的值依赖于特定环境或配置的情况。原创 2024-03-30 06:00:00 · 425 阅读 · 0 评论 -
设计模式 - 命令模式
使用,可以将执行特定任务的对象与调用该方法的对象分离。假设有一个在线送餐平台。用户可以下订单、跟踪订单和取消订单。在类上,可以访问placeOrdertrackOrder和方法。直接使用这些方法将是完全有效的 JavaScript!但是,直接在manager实例上调用这些方法也有缺点。以后可能会决定重命名某些方法,或者方法的功能发生变化。假设现在不将其命名为placeOrder,而是将其重命名为addOrder!这意味着必须确保不会在代码库中的任何位置调用placeOrder。原创 2024-03-29 11:06:51 · 543 阅读 · 0 评论