Web开发中的4种设计模式
你是否曾经在一个团队里,需要从零开始一个项目?这种情况在很多初创公司和其他小公司中很常见。编程语言、架构和其他方面种类繁多,让人不知从何入手。这时,设计模式就派上用场了。
设计模式就像项目的模板。它使用某些约定,您可以预期它们会实现特定的行为。这些模式源自众多开发人员的经验,因此它们实际上就像不同的最佳实践集合。您和您的团队需要决定哪一套最佳实践对您的项目最有用。根据您选择的设计模式,大家将开始对代码的功能以及将要使用的词汇有所期待。
编程设计模式适用于所有编程语言,并且适用于任何项目,因为它们只提供解决方案的总体框架。《设计模式——可复用面向对象软件的元素》一书收录了 23 种官方模式,该书被认为是面向对象理论和软件开发领域最具影响力的书籍之一。我将在这里介绍其中 4 种设计模式,以便让您了解其中几种模式的含义以及何时应该使用它们。
单例设计模式
关于单例模式,你需要了解的重点是,它只允许一个类拥有一个实例,并使用全局变量来存储该实例。你需要使用延迟加载来确保该类只有一个实例,因为它只会在需要时创建该类。这可以防止创建多个实例。大多数情况下,延迟加载是在构造函数中实现的。
您可能经常使用的单例示例是 JavaScript 中的状态对象。如果您使用过某些前端框架(例如 React 或 Angular),那么您一定非常了解父组件的状态是如何分发给子组件的。这是一个很好的单例示例,因为您通常不希望该状态对象有多个实例。
策略设计模式
该策略模式类似于 if else 语句的高级版本。它本质上是为基类中的方法创建一个接口。然后,该接口用于从派生类中查找该方法的正确实现。在这种情况下,具体实现将在运行时根据客户端的情况决定。
这种模式在类中既有必需方法也有可选方法的情况下非常有用。该类的某些实例不需要可选方法,这会给继承方案带来问题。你可以使用接口来实现可选方法,但由于没有默认实现,每次使用类时都必须编写实现。
这时策略模式就派上用场了。客户端不再自己寻找实现,而是委托给策略接口,然后策略会自己找到合适的实现。
观察者设计模式
如果您曾经使用过 MVC 模式,那么您肯定已经使用过观察者设计模式。观察者模式就像 MVC 的视图部分。您有一个主体,它保存所有数据及其状态。然后,您有观察者(例如用户),当数据更新时,它们会从主体中提取数据。
这种设计模式的应用非常广泛,以至于它成为了 MVC 不可或缺的一部分。发送用户通知、更新、过滤以及处理订阅者都可以使用观察者模式完成。
装饰器设计模式
使用装饰器设计模式相当简单。你可以创建一个基类,其中包含一些方法和属性,当你用该类创建新对象时,这些方法和属性就会出现。现在假设你有一些该类的实例,它们需要基类中没有的方法或属性。你可以将这些额外的方法和属性添加到基类中,但这可能会扰乱其他实例。你甚至可以创建子类来保存你需要的、无法放入基类中的特定方法和属性。
这两种方法都能解决你的问题,但它们笨重且效率低下。这时,装饰器模式就派上用场了。与其为了给对象实例添加一些内容而让代码库变得丑陋,不如直接将这些特定的内容添加到实例上。因此,如果你需要添加一个保存实例时间的新属性,你可以使用装饰器模式将其直接添加到该特定实例,而不会影响该类对象的任何其他实例。
你曾经在线订过餐吗?那么你可能遇到过装饰器模式。如果你点了一个三明治,想添加一些特殊的配料,网站并不会把这些配料添加到每个当前用户想要订购的三明治上。它只会把这些特殊的配料添加到你的三明治实例上。当你需要处理一个对象的多个实例,并且需要像这样动态添加值时,装饰器模式是一个不错的选择。
我以前总以为设计模式是些天马行空、高深莫测的软件开发指南。后来我发现,我一直在用它们!我介绍的几个模式在很多应用程序中都有应用,简直令人难以置信。说到底,它们只是理论而已。作为开发者,我们应该如何运用这些理论,让我们的应用程序更易于实现和维护。
你们在项目中使用过其他设计模式吗?大多数公司通常会选择一种设计模式并坚持使用,所以我想听听你们都用了什么。
嘿!你应该在 Twitter 上关注我,理由如下:https://twitter.com/FlippedCoding
文章来源:https://dev.to/flippedcoding/4-design-patterns-in-web-development-55p7