介绍
Design patterns 在软件开发人员中非常受欢迎. 设计模式是解决一个常见的软件问题的一种清楚的解决方案。
使用设计模式的一些好处是:
- 设计模式已经定义,并提供一个行业标准的方法来解决重复出现的问题,所以如果我们明智地使用设计模式,它可以节省时间。 在我们的基于Java的项目中,我们可以使用许多Java设计模式
- 使用设计模式促进了可重复使用性,这导致了更强大和可维护的代码。 它有助于降低软件产品的总所有权成本(TCO)。
Java 设计模式分为三个类别: creational、 structural 和 behavioral 设计模式。
本文作为所有Java设计模式文章的索引。
创意设计模式
创意设计模式提供解决方案,以最佳的方式为特定情况实例化对象
。
1、独角兽模式
singleton 模式限制了类
的实例化,并确保在 Java 虚拟机中只存在一个类的实例。
<$>[注] 注: 了解更多关于 Singleton Design Pattern的信息。
2、工厂模式
工厂设计模式是当我们有一个具有多个子类的超级阶级和基于输入时使用的,我们需要返回一个子类。这个模式从客户端程序到工厂类的类
的实例化负责。
<$>[注] 注: 了解更多关于 [工厂设计模式]( / 社区 / 教程 / 工厂设计模式 - 雅瓦瓦)。
3、抽象工厂模式
如果你熟悉Java的工厂设计模式,你会注意到我们有一个单一的工厂类,根据提供的输入返回不同的子类,而工厂类则使用if-else
或switch
陈述来实现这一点。
<$>[注] 注: 了解更多关于 Abstract Factory Pattern的信息。
四、建造模式
建模模式被引入,以解决一些与工厂和抽象工厂设计模式的问题,当对象包含许多属性时。
<$>[注] 注: 了解更多关于 Builder 模式的信息。
5、原型模式
原型模式是当对象
的创建是昂贵的,需要大量的时间和资源时使用的,并且你有一个类似的对象
已经存在了,所以这个模式提供了将原始的对象
复制到一个新的对象
,然后根据我们的需求进行修改的机制。这个模式使用Java克隆来复制对象
。原型设计模式命令你正在复制的对象
应该提供复制功能。它不应该由任何其他类别进行。
<$>[注] 注: 了解更多关于 Prototype Pattern的信息。
结构设计模式
结构设计模式提供不同的方法来创建一个类
结构(例如,使用继承和组成从小对象
中创建一个大对象
)。
1、适应模式
适配器设计模式是结构设计模式之一,用来使两个无关的接口可以一起工作,连接这些无关的接口的对象称为适配器。
<$>[注] 注: 了解更多关于 Adapter Pattern的信息。
2、组合模式
当我们需要以一种方式创建结构,使结构中的对象必须以相同的方式处理时,我们可以应用复合设计模式。
<$>[注] 注: 了解更多关于 [复合模式]( / 社区 / 教程 / 复合设计 - 模式 - 在 Java)的信息。
3、代理模式
代理模式为另一个对象
提供一个位置,以控制访问它. 此模式是当我们想要提供对功能的控制访问时使用的。
<$>[注] 注: 了解更多关于 代理模式的信息。
四、飞行模式
由于每个对象
都消耗了对低内存设备(如移动设备或嵌入式系统)至关重要的内存空间,因此,可以通过共享对象
来减少内存负载。
String pool在Java中的实现是飞重模式实现的最佳例子之一。
<$>[注] 注: 了解更多关于 Flyweight Pattern的信息。
5、面部模型
面板模式用于帮助客户端应用程序轻松与系统交互。
<$>[注] 注: 了解更多关于 [面貌模式]( / 社区 / 教程 / 面部设计 - 模式 - 在 Java)。
6、桥梁模式
当我们在两个界面以及实现中都有界面等级时,桥梁设计模式被用来将界面与实现分开,并从客户端程序中隐藏实施细节。
<$>[注] 注: 了解更多关于 桥梁模式。
7、装饰模型
装饰设计模式用于在运行时修改一个对象的功能。同时,同一类别的其他实例不会受到影响,因此个别对象获得了更改的行为。装饰设计模式是结构设计模式之一(如适配器设计模式、桥梁设计或复合模式),并使用抽象类或与组合的界面来实现。我们使用继承或组合来扩展对象的行为,但这是在编译时完成的,并且适用于该类的所有实例。
<$>[注] 注: 了解更多关于 [装饰模式]( / 社区 / 教程 / 装饰设计 - 模式 - 在 Java - 例子)。
行为设计模式
行为模式为物体之间的更好交互提供了解决方案,以及如何提供宽松的连接和灵活性,以便轻松扩展。
1、模板模式
模板方法模式是一种行为设计模式,用于创建方法模板,并将某些实现步骤推迟到子类。
<$>[注] 注: 了解更多关于 Template Method Pattern的信息。
二、中介模式
调解器设计模式是用来提供一个系统中不同对象之间的集中式通信介质。如果对象直接相互作用,系统组件彼此紧密相连,这使得维护成本更高,而不是容易扩展的灵活性。调解器模式侧重于提供对象之间的调解器进行通信并实现对象之间的松散连接。
<$>[注] 注: 了解更多关于 中介模式 <$>
3、责任链模式
责任链模式用于实现软件设计中的松散连接,其中客户端的请求传递给一个对象链来处理它们,然后链中的对象将决定谁将处理请求,以及是否需要将请求发送到链中的下一个对象。
我们知道,我们可以在试捕
区块代码中拥有多个捕捉
区块,在这里每个捕捉
区块都是处理该特定的例外的处理器,所以当在试试
区块中发生例外时,它被发送到第一个捕捉
区块进行处理。
<$>[注] **注:**了解更多关于(链责任模式)( / 社区 / 教程 / 链责任 - 设计 - 模式 - 在 Java)的信息。
四、观察模式
在观察员设计模式中,观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察员观察者观察对象观察员观察员观察员观察员观察者观察对象观察者观察对象观察员观察员观察者观察者观察者观察者观察者观察者观察者观察者观察者观察对象观察者观察对象观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察者观察
Java提供了一个内置的平台,用于通过java.util.Observable
类和java.util.Observer
接口实现观察者模式,但是,它没有被广泛使用,因为实现是有限的,而且大多数时候我们不想最终扩展一个类仅用于实施观察者模式,因为Java在类中不提供多个继承。
<$>[注] 注: 了解更多关于 [观察者模式]( / 社区 / 教程 / 观察者设计 - 模式 - 在 Java)的信息。
五、战略模式
策略模式是当我们为特定任务有多个算法时使用的,而客户端决定在运行时使用实际实现时。
这种模式的最佳例子之一是Collections.sort()
方法,它采用了 Comparator参数。
<$>[注] 注: 了解更多关于 [策略模式]( / 社区 / 教程 / 策略 - 设计 - 模式 - 在java - 例子 - 教程)。
第6章 命令模式
命令模式用于在请求响应模型中实现松散连接. 在此模式中,请求被发送到 invoker 并调用器将其传送到封装的 command 对象。
<$>[注] 注: 了解更多关于 [命令模式]( / 社区 / 教程 / 命令设计模式)。
7、国家模式
如果我们必须根据其状态改变一个对象
的行为,我们可以在对象
中拥有一个状态变量,并使用如果是
条件块根据状态执行不同的行动。
<$>[注] 注: 了解更多关于 国家模式。
8、参观模式
当我们必须在一组类似类型的对象上执行操作时,使用访问者模式,我们可以将操作逻辑从对象移动到另一个类别。
<$>[注] 注: 了解更多关于 访客模式。
9、翻译模式
口译模式被用来定义一种语言的语法表示,并提供一个口译器来处理这个语法。
第10章 模特尔
迭代器模式是行为模式之一,用来提供通过一组对象穿越的标准方式。迭代器模式被广泛应用于Java Collection Framework(/community/tutorials/collections-in-java-tutorial)中,迭代器接口提供通过Collection
穿越的方法。该模式也被用来根据我们的要求提供不同类型的迭代器。
<$>[注] 注: 了解更多关于 Iterator 模式的信息。
11、记忆模式
记忆设计模式是当我们想要保存对象的状态时使用的,以便我们可以稍后恢复它. 这种模式是用来实现这种方式,以便对象的保存状态数据无法在对象
之外访问,这保护了保存状态数据的完整性。
Memento 模式是用两个Object
实现的 – originator 和 caretaker. 起源是Object
,其状态需要保存和恢复,它使用一个内部类来保存Object
的状态。
混合设计模式
有很多设计模式不属于四种设计模式,让我们来看看这些流行的设计模式。
1、DAO设计模式
数据访问对象(DAO)设计模式用于将数据持久性逻辑分离为一个单独的层。DAO是当我们设计系统以与数据库工作时非常流行的模式。
<$>[注] 注: 了解更多关于 DAO 模式的信息。
2、依赖性注射模式
依赖性注射模式允许我们删除硬代码的依赖性,使我们的应用程序宽松连接、可扩展和可维护。我们可以在Java中实施依赖性注射,将依赖性分辨率从编译时间移动到运行时间。
<$>[注] 注: 了解更多关于 依赖注射模式。
3、MVC模式
模型视图控制器(MVC)模式是创建Web应用程序的最古老的架构模式之一。
结论
本文概述了Java设计模式。
您可以从我们的 GitHub 存储库查看 Java 设计模式示例代码。
继续学习更多的Java教程(https://andsky.com/tags/java)。