发布于 2026-01-06 1 阅读
0

最重要的7种软件设计模式 为什么需要设计模式?最重要的设计模式

7种最重要的软件设计模式

为什么选择设计模式?

最重要的设计模式

想要深入了解软件设计模式,可以看看CH Afzal编写的《软件设计模式:开发者最佳实践》。CH Afzal是一位经验丰富的软件工程师,曾在 Netflix、微软和 Oracle 等公司工作多年。以下内容大多摘自他的课程。

为什么选择设计模式?

近年来,设计模式在编程界引起了一些争议,主要是因为人们认为设计模式被“过度使用”,导致代码难以理解和管理。

必须明白,设计模式绝非是拼凑起来的捷径,不能随意地、一刀切地套用到代码中。在软件工程中,真正的解决问题的能力是无可替代的。

然而,不可否认的是,如果使用得当,设计模式确实非常有用。策略性地运用设计模式,可以显著提高程序员的效率,避免重复造轮子,而是采用他人已经完善的方法。此外,在与他人讨论或在大型团队中管理代码时,设计模式还能提供一种有用的通用语言,用于概念化重复出现的问题和解决方案。

话虽如此,但需要注意的是,必须确保开发人员也理解每种模式背后的原理和原因。

无需赘言(大致按重要性排序,从最重要到最不重要):

最重要的设计模式

1)单例

单例模式用于限制类的创建次数,使其仅创建一个对象。当只需要一个(且仅一个)对象来协调整个系统中的操作时,这种模式非常有用。例如,缓存、线程池和注册表等都属于只需要一个类实例的情况。

创建一个类的对象很简单——但如何确保只创建一个对象呢?答案是将构造函数设为单例类的“私有”。这样,只有该类的成员才能访问私有构造函数,其他任何人都无法访问。

重要提示:可以通过将构造函数从私有改为受保护来创建单例的子类。在某些情况下,这可能适用。一种常见的做法是创建一个子类单例注册表,其 ` getInstance`方法可以接收一个参数或使用环境变量来返回所需的单例。注册表维护着一个字符串名称到单例对象的映射,可以根据需要访问该映射。

2)工厂法

普通工厂生产商品;软件工厂生产对象。不仅如此,它还无需指定要创建对象的具体类。为了实现这一点,对象是通过调用工厂方法而不是构造函数来创建的。
文字的替代图像

通常,Java 中的对象创建过程如下:

SomeClass someClassObject = new SomeClass();
Enter fullscreen mode Exit fullscreen mode

上述方法的弊端在于,使用 SomeClass 对象的代码突然变得依赖于 SomeClass 的具体实现。使用 new 创建对象本身并没有错,但它会带来代码与具体实现类紧密耦合的弊端,这有时会引发问题。

3)战略

这种策略模式允许将相关的算法分组到一个抽象层下,从而无需修改客户端即可替换一个算法或策略。代码无需直接实现单个算法,而是接收运行时指令来指定要运行的算法组中的哪一个。

4)观察者

这种模式是一种对象间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖对象都会收到通知。这通常是通过调用依赖对象的方法来实现的。

为了便于理解,不妨想想你在 Twitter 上关注某人时会发生什么。你实际上是在请求 Twitter 向你(观察者)推送你关注的人(主体)的推文更新。这种模式包含两个参与者:对更新感兴趣的观察者和发布更新的主体。

文字的替代图像

一个主题可以有多个观察者,这是一种一对多的关系。然而,观察者也可以订阅其他主题的更新。例如,您可以订阅某个 Facebook 页面的新闻推送,该页面就是主题。每当该页面发布新内容时,订阅者都会看到。

关键考虑因素:当受试者众多而观察者较少时,如果每个受试者单独存储其观察者,则会增加存储成本,因为有些受试者会多次存储同一个观察者。

5)建筑商

顾名思义,建造者模式用于构建对象。有时,我们创建的对象可能很复杂,由多个子对象组成,或者需要复杂的构建过程。使用建造者模式可以简化创建复杂类型的操作。建造者模式通常构建的是复合对象或聚合对象。

关键考虑因素:建造者模式可能看起来与“抽象工厂”模式相似,但区别在于建造者模式是逐步创建对象,而抽象工厂模式是一次性返回对象。

6)适配器

这使得不兼容的类能够协同工作,方法是将一个类的接口转换为另一个类的接口。可以把它想象成一种翻译器:当两位语言不通的国家元首会面时,通常会有一位翻译员坐在他们中间,翻译对话内容,从而实现沟通。

文字的替代图像

如果你有两个应用程序,一个以 XML 格式输出,另一个需要 JSON 输入,那么你需要一个适配器将这两个应用程序连接起来,使它们能够无缝地工作。

7)州

状态模式封装了机器可能处于的各种状态,并允许对象在其内部状态改变时改变其行为。机器(或用模式术语来说,是上下文)可以执行某些操作,从而进入不同的状态。如果没有使用状态模式,代码将变得僵化,并且充斥着大量的 if-else 条件语句。

想继续学习吗?

通过《软件设计模式:开发者最佳实践》,您不仅可以学习理论,还能深入探讨实际问题,并通过真实的代码示例理解切实可行的解决方案。

本课程以“四人帮”的畅销书为基础,采用互动式、易于理解的方式呈现。您将通过互动学习掌握书中23种著名的设计模式,了解三种关键设计模式类型(创建型、结构型和行为型)的正确应用,并学习如何将这些设计模式融入到您自己的项目中。

PS:如果您想更深入地了解系统设计,我有一份详细的系统设计指南。请继续阅读以了解更多信息!

文章来源:https://dev.to/fahimulhaq/the-7-most-important-software-design-patterns-2fea