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

要全面深入了解软件设计模式主题,请查看C.H.创建的软件设计模式:开发人员最佳实践。 Afzal是一位资深软件工程师,在Netflix,Microsoft和Oracle拥有多年经验。他的课程总结了以下许多内容。

为什么要设计模式?

设计模式近来已成为编程界一些争议的对象,这主要是由于设计模式被认为“过度使用”导致代码难以理解和管理。

重要的是要理解,设计模式绝不应该被黑客砍在一起,而可以以一种“千篇一律”的方式将快捷方式应用到您的代码中。最终,软件工程中无法替代真正的问题解决能力。

但是,事实仍然是,如果在正确的情况下以及出于正确的原因使用设计模式,它们会非常有用。如果策略性地使用它们,可以避免重新发明众所周知的轮子,而不必使用已经被别人提炼的方法,从而可以使程序员效率大大提高。当与他人讨论或在较大的团队中管理代码时,它们还提供了有用的通用语言来概念化重复出现的问题和解决方案。

话虽如此,一个重要的警告是确保开发人员也理解每种模式背后的方式和原因。

事不宜迟(从大到小,从总体上看,重要性顺序高低):

最重要的设计模式

  1. 辛格尔顿

单例模式用于将类的创建限制为仅一个对象。当需要一个(只有一个)对象来协调整个系统中的动作时,这是有益的。在几个示例中,仅应存在一个类的单个实例,包括缓存,线程池和注册表。

初始化一个类的对象很简单-但是我们如何确保只创建一个对象呢?答案是使构造函数“私有”到我们打算定义为单例的类。这样,只有该类的成员才能访问私有构造函数,而其他人则不能。

重要注意事项:可以通过使构造函数受保护而不是私有来继承单例。在某些情况下这可能是合适的。在这些情况下采取的一种方法是创建子类的单例寄存器,而getInstance方法可以采用参数或使用环境变量来返回所需的单例。然后,注册表维护字符串名称到单例对象的映射,可以根据需要对其进行访问。

2.工厂方法

普通工厂生产商品;软件工厂生产对象。不仅如此,它还没有指定要创建的对象的确切类。为此,可以通过调用工厂方法而不是调用构造函数来创建对象。

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

SomeClass someClassObject =新的SomeClass();

上述方法的问题在于,使用SomeClass对象的代码现在突然变得依赖于SomeClass的具体实现。使用new创建对象并没有错,但是它伴随着将我们的代码紧密耦合到具体实现类的负担,这有时会出现问题。

3.策略

策略模式允许在抽象之下对相关算法进行分组,从而无需修改客户端就可以将一种算法或策略切换为另一种。该代码不是直接实现单个算法,而是接收运行时指令,这些指令指定要运行的算法组。

4.观察者

此模式是对象之间的一对多依赖关系,因此当一个对象更改状态时,将通知其所有依赖关系。这通常是通过调用其方法之一来完成的。

为了简单起见,请考虑当您在Twitter上关注某人时会发生什么。您实质上是在要求Twitter将您关注的人(主题)的最新动态发送给您(观察者)。该模式由两个参与者组成,一个是对更新感兴趣的观察者,另一个是生成更新的主题。

一个主题可以有许多观察者,并且是一对多的关系。但是,观察者也可以自由订阅其他主题的更新。您可以从Facebook页面订阅新闻源,该页面将成为主题,并且只要页面上有新帖子,订阅者就会看到新帖子。

关键考虑因素:如果有多个主题,而观察者很少,则每个主题分别存储其观察者,则会增加存储成本,因为某些主题会多次存储同一观察者。

5.建造者

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

关键考虑因素:构建器模式可能看起来类似于“抽象工厂”模式,但区别在于构建器模式逐步创建对象,而抽象工厂模式则一次性生成对象。

6.转接器

这样可以通过将一个类的接口转换为另一个类来使不兼容的类协同工作。可以将其视为一种翻译:当两个不会说一种共同语言的国家元首见面时,通常会有一名翻译坐在两者之间,翻译对话,从而实现交流。

如果您有两个应用程序,其中一个以XML格式输出,而另一个则需要JSON输入,那么您将需要在两者之间使用适配器以使其无缝运行。

7.状态

状态模式封装了机器可以处于的各种状态,并允许对象在其内部状态更改时更改其行为。正如机器所说的那样,机器或上下文可以对机器执行某些操作,以使其进入不同的状态。如果不使用该模式,则代码将变得僵硬,并带有if-else条件语句。

想继续学习吗?

使用“软件设计模式:开发人员的最佳实践”,您将有更多的机会做,而不仅仅是阅读理论。您将能够深入研究实际问题,并通过实际的代码示例了解实际的解决方案。

该课程以《四人帮》(Gang of Four)最受欢迎的一本书为基础,但以交互式,易于理解的格式展示。您将以交互方式掌握本书中的23种著名的设计模式,学习3种主要设计模式类型(创意,结构和行为)的正确应用,并将这些设计模式整合到自己的项目中。

立即查看。

最初于2018年11月7日发布在blog.educative.io上。