介绍
设计模式在软件开发者中非常流行。设计模式是对常见软件问题的一种描述详细的解决方案。
使用设计模式的一些好处包括:
- 设计模式已经定义并提供了一种行业标准的方法来解决重复出现的问题,因此,合理使用设计模式可以节省时间。在我们的基于Java的项目中,有许多可以使用的Java设计模式。
- 使用设计模式促进了可重用性,从而导致更健壮和易于维护的代码。它有助于降低软件产品的总体拥有成本(TCO)。
- 由于设计模式已经定义,这使得我们的代码易于理解和调试。这导致更快的开发,并且团队中的新成员可以轻松理解它。
Java设计模式分为三类 – 创建型,结构型和行为型设计模式。
本文作为所有Java设计模式文章的索引。
创建型设计模式
创建型设计模式提供了在特定情况下以最佳方式实例化一个对象
的解决方案。
1. 单例模式
单例模式限制了类
的实例化,并确保在Java虚拟机中只存在一个类的实例。单例模式的实现一直是开发人员之间争议的话题。
注意:了解更多关于单例设计模式的信息。
2. 工厂模式
工厂设计模式用于当我们有一个包含多个子类的超类,并且根据输入,我们需要返回其中一个子类的情况。这种模式将类
的实例化责任从客户程序转移到工厂类。我们可以在工厂类上应用单例模式,或者使工厂方法静态
。
注意:了解更多关于工厂设计模式的信息。
3. 抽象工厂模式
抽象工厂模式类似于工厂模式,是一种工厂的工厂。如果您熟悉Java中的工厂设计模式,您将注意到我们有一个单一的工厂类,根据提供的输入返回不同的子类,并且工厂类使用if-else
或switch
语句来实现此目的。在抽象工厂模式中,我们摆脱了if-else
块,为每个子类都有一个工厂类,然后有一个抽象工厂类,根据输入工厂类返回子类。
注意:了解更多关于抽象工厂模式的信息。
4. 建造者模式
建造者模式是为解决工厂和抽象工厂设计模式中对象包含大量属性的问题而引入的。该模式通过逐步构建对象并提供一个实际返回最终Object
的方法来解决具有大量可选参数和不一致状态的问题。
注意:了解更多关于建造者模式。
5. 原型模式
原型模式用于当Object
的创建成本高昂,需要大量时间和资源,并且您已经有一个类似的现有Object
的情况。因此,该模式提供了一种机制,可以将原始Object
复制到新的Object
,然后根据我们的需求进行修改。此模式使用Java克隆来复制Object
。原型设计模式要求您复制的Object
应提供复制功能。不应由任何其他类执行此操作。然而,是使用对象属性的浅复制还是深复制取决于需求,是一项设计决策。
注意:了解更多关于原型模式。
结构设计模式
结构设计模式提供了创建类
结构的不同方式(例如,使用继承和组合来从小对象
创建大对象
)。
1. 适配器模式
适配器设计模式是结构设计模式之一,用于使两个不相关的接口能够一起工作。将这些不相关的接口连接起来的对象称为适配器。
注意:了解更多关于适配器模式的信息。
2. 组合模式
当我们需要表示部分-整体层次结构时,使用组合模式。当我们需要以一种对象在结构中必须被相同对待的方式创建结构时,可以应用组合设计模式。
注意:了解更多关于组合模式的信息。
3. 代理模式
代理模式提供了另一个对象
的占位符来控制对它的访问。当我们想要提供对功能的受控访问时,就会使用此模式。
注意:了解更多关于代理模式的信息。
4. 享元模式
享元设计模式用于在需要创建大量类
的对象
时使用。由于每个对象
消耗的内存空间对于低内存设备(如移动设备或嵌入式系统)可能至关重要,因此可以应用享元设计模式来通过共享对象
来减轻内存负担。
注意:了解更多关于享元模式的信息。
5. Facade Pattern
外观模式用于帮助客户端应用程序与系统轻松交互。
注意:了解更多关于外观模式的信息。
6. Bridge Pattern
当我们在接口和实现中都有层次结构时,桥接设计模式用于将接口与实现解耦,并隐藏实现细节,使客户端程序不受影响。桥接设计模式的实现遵循优先使用组合而不是继承的概念。
注意:了解更多关于桥接模式的信息。
7. Decorator Pattern
装饰器设计模式用于在运行时修改对象的功能。同时,同一类的其他实例不会受到影响,因此个体对象获得了修改后的行为。装饰器设计模式是结构设计模式之一(例如适配器模式、桥接模式或组合模式),并使用抽象类或接口与组合一起实现。我们使用继承或组合来扩展对象的行为,但这是在编译时完成的,并且适用于类的所有实例。我们无法在运行时添加任何新功能或删除任何现有行为 – 这就是装饰器模式发挥作用的时候。
注意:了解更多关于装饰器模式的信息。
行为设计模式
行为模式为对象之间提供更好的交互解决方案,并提供松散耦合和轻松扩展的灵活性。
1. 模板方法模式
模板方法模式是一种行为设计模式,用于创建方法存根并将实现的某些步骤推迟到子类。模板方法定义了执行算法的步骤,它可以提供一个默认实现,该实现可能对所有或某些子类都是通用的。
注意: 了解更多关于模板方法模式。
2. 中介者模式
中介者设计模式用于在系统中为不同对象提供集中的通信媒介。如果对象直接相互交互,系统组件之间的耦合度就会很高,这会使可维护性成本更高,且不易于灵活扩展。中介者模式专注于为对象之间的通信提供中介,并实现对象之间的松耦合。中介者作为对象之间的路由器,它可以有自己的逻辑来提供通信的方式。
注意: 了解更多关于中介者模式。
3. 责任链模式
责任链模式用于在软件设计中实现松耦合,客户端的请求被传递给一系列对象来处理。然后链中的对象将决定由谁来处理请求,以及是否需要将请求发送到链中的下一个对象。
我们知道我们可以在try-catch
块中有多个catch
块。这里每个catch
块都是处理特定异常的处理器。因此,当try
块中发生异常时,它被发送到第一个catch
块进行处理。如果catch
块无法处理它,它将请求转发给链中的下一个Object
(即下一个catch
块)。如果即使最后一个catch
块也无法处理它,则异常被抛出到调用程序之外的链中。
注意:了解更多关于责任链模式。
4. 观察者模式
观察者设计模式在你关心一个对象
的状态并且想在其发生变化时得到通知时非常有用。在观察者模式中,观察另一个对象
状态的对象
被称为观察者,而被观察的对象
被称为主题。
Java通过java.util.Observable
类和java.util.Observer
接口提供了内置平台来实现观察者模式。然而,由于实现受限制,而且大多数时候我们不想为了实现观察者模式而单独扩展一个类,因为Java不支持类的多继承。Java消息服务(JMS)使用观察者模式以及中介者模式,允许应用程序订阅并向其他应用程序发布数据。
注意: 了解更多关于观察者模式的信息。
5. 策略模式
策略模式用于当我们有多个针对特定任务的算法时,客户端决定在运行时使用哪个实际实现。策略模式也被称为政策模式。我们定义多个算法,让客户端应用将要使用的算法作为参数传递。
这种模式的一个最好的例子是Collections.sort()
方法,它接受Comparator参数。基于比较器接口的不同实现,对象以不同的方式进行排序。
注意:了解更多关于策略模式的信息。
6. 命令模式
命令模式用于在请求-响应模型中实现松耦合。在这种模式中,请求被发送到调用者,调用者将其传递给封装的命令对象。命令对象将请求传递给接收者的适当方法以执行特定的操作。
注意:了解更多关于命令模式的信息。
7. 状态模式
状态设计模式是当一个对象
根据其内部状态改变其行为时使用的。如果我们必须根据其状态改变对象
的行为,我们可以在对象
中有一个状态变量,并使用if-else
条件块根据状态执行不同的操作。状态模式通过上下文和状态实现提供了一种系统化和松散耦合的方式来实现这一点。
注意:了解更多关于状态模式的信息。
8. 访问者模式
访问者模式用于当我们需要对一组相似类型的对象执行操作时。借助访问者模式,我们可以将操作逻辑从对象移到另一个类中。
注意:了解更多关于访问者模式的信息。
9. 解释器模式
解释器模式用于定义语言的语法表示,并提供解释器来处理这个语法。
10. 迭代器模式
迭代器模式是行为模式之一,用于提供遍历一组对象的标准方式。迭代器模式在Java集合框架中被广泛使用,其中迭代器接口提供了遍历Collection
的方法。该模式还用于根据我们的需求提供不同类型的迭代器。迭代器模式隐藏了通过Collection
进行遍历的实际实现,客户端程序使用迭代器方法。
注意:了解更多关于迭代器模式。
11. 备忘录模式
备忘录设计模式用于在我们希望保存对象状态以便以后恢复时使用。该模式用于以一种使对象的保存状态数据不可在Object
外部访问的方式实现这一点,从而保护了保存状态数据的完整性。
备忘录模式由两个对象
实现 – 发起人和看管者。 发起人是需要保存和恢复状态的对象
,它使用内部类来保存对象
的状态。 内部类称为“Memento”,它是private
的,因此无法从其他对象访问。
杂项设计模式
有许多不属于四人帮设计模式的设计模式。 让我们看一些这些流行的设计模式。
1. DAO设计模式
数据访问对象(DAO)设计模式用于将数据持久性逻辑解耦到单独的层。 当我们设计与数据库一起工作的系统时,DAO是一种非常流行的模式。 思想是将服务层与数据访问层分开。 这样,我们在应用程序中实现逻辑的分离。
注意:了解更多关于DAO模式。
2. 依赖注入模式
依赖注入模式允许我们移除硬编码的依赖关系,使我们的应用程序松散耦合、可扩展且易于维护。我们可以在Java中实现依赖注入,将依赖关系的解析从编译时移到运行时。Spring框架建立在依赖注入的原则上。
注意:了解更多关于依赖注入模式的信息。
3. MVC 模式
模型-视图-控制器(MVC)模式是用于创建Web应用程序的最古老的架构模式之一。
结论
本文总结了Java设计模式。
您可以从我们的GitHub存储库中查看Java设计模式示例代码。
继续学习更多的Java教程。
Source:
https://www.digitalocean.com/community/tutorials/java-design-patterns-example-tutorial