java设计模式概览

版权声明:未经博主同意,谢绝转载!(请尊重原创,感谢) https://blog.csdn.net/topdeveloperr/article/details/83307189

Table of Contents

概述

Creational Design Patterns - 创建设计模式

Structural Design Patterns - 结构设计模式

Behavioral Design Patterns - 行为设计模式

Creational Design Patterns - 创建设计模式

Singleton Pattern - 单例模式

Factory Pattern - 工厂模式

Abstract Factory Pattern - 抽象工厂模式

Builder Pattern - 建造者模式

Prototype Pattern - 原型模式

Structural Design Patterns - 结构设计模式

Adapter Pattern - 适配器模式

Composite Pattern - 组合模式

Proxy Pattern - 代理模式

Flyweight Pattern - 享元模式

Facade Pattern - 门面模式

Bridge Pattern - 桥接模式

Decorator Pattern - 装饰者模式

Behavioral Design Patterns - 行为设计模式

Template Method Pattern - 模板方法模式

Mediator Pattern - 中介者模式

Chain of Responsibility Pattern - 责任链模式

Observer Pattern - 观察者模式

Strategy Pattern - 策略模式

Command Pattern - 命令模式

State Pattern - 状态模式

Visitor Pattern - 访问者模式

Interpreter Pattern - 解析器模式

Iterator Pattern - 迭代器模式

Memento Pattern - 备忘录模式


概述

设计模式在软件开发人员中非常流行。设计模式是常见软件问题的一种较好的解决方案。Java设计模式可以分为三类:创造性的、结构化的和行为设计模式。

使用设计模式的一些好处是:

  1. 设计模式已经被定义并提供了行业标准方法来解决重复出现的问题,因此如果我们合理地使用设计模式,可以节省时间。有很多Java设计模式,我们可以在基于Java的项目中使用。
  2. 使用设计模式促进重用性,从而导致更健壮和高度可维护的代码。它有助于降低软件产品的总拥有成本(TCO)。
  3. 由于设计模式已经定义,它使我们的代码易于理解和调试。它促进了更快的发展,团队的新成员很容易理解它。

Creational Design Patterns - 创建设计模式

  1. Singleton Pattern - 单例模式
  2. Factory Pattern - 工厂模式
  3. Abstract Factory Pattern - 抽象工厂模式
  4. Builder Pattern - 建造者模式/生成器模式
  5. Prototype Pattern - 原型模式

Structural Design Patterns - 结构设计模式

  1. Adapter Pattern - 适配器模式
  2. Composite Pattern - 组合模式
  3. Proxy Pattern - 代理模式
  4. Flyweight Pattern - 享元模式
  5. Facade Pattern - 门面模式/外观模式
  6. Bridge Pattern - 桥接模式
  7. Decorator Pattern - 装饰者模式

Behavioral Design Patterns - 行为设计模式

  1. Template Method Pattern - 模板方法模式
  2. Mediator Pattern - 中介者模式
  3. Chain of Responsibility Pattern - 责任链模式
  4. Observer Pattern - 观察者模式
  5. Strategy Pattern - 策略模式
  6. Command Pattern - 命令模式
  7. State Pattern - 状态模式
  8. Visitor Pattern - 访问者模式
  9. Interpreter Pattern - 解析器模式
  10. Iterator Pattern - 迭代器模式
  11. Memento Pattern - 备忘录模式

Creational Design Patterns - 创建设计模式

创造设计模式提供了以特定的方式以最佳可能的方式实例化对象的解决方案。

Singleton Pattern - 单例模式

单例模式限制类的实例化,并确保类中只有一个实例存在于Java虚拟机中。这似乎是一个非常简单的设计模式,但是在实现时,它会带来很多的执行问题。单模式的实现一直是开发者们争论的话题。这是最受讨论的Java设计模式之一。

Factory Pattern - 工厂模式

工厂设计模式用于当我们有一个具有多个子类的超级类,并且基于输入时,我们需要返回一个子类。该模式将类从客户端程序实例化到工厂类的职责。我们可以在工厂类上应用单模式,或者使工厂方法静态化。这是使用最广泛的Java设计模式之一。

Abstract Factory Pattern - 抽象工厂模式

抽象工厂模式类似于工厂模式,它是工厂的工厂。如果您熟悉java的工厂设计模式,您会注意到,我们有一个工厂类,它根据所提供的输入返回不同的子类,而工厂类则使用if-else或Swith语句来实现这一点。

在抽象工厂模式当中,我们可以不使用if-else代码块,而是由一个超级工厂根据要创建的相关对象去创建工厂。

Builder Pattern - 建造者模式

建造者模式解决了一些工厂和抽象工厂设计模式面对一个象包含很多属性时候的问题。生成器模式通过大量的可选参数和不一致状态,提供了一个一步一步创建出这个对象的方法,来解决这种复杂对象的创建问题。

Prototype Pattern - 原型模式

当对象创建非常昂贵并且需要大量时间和资源并且您已经有了类似的对象时,将使用原型模式。该模式提供了将原始对象复制到新对象并根据需要修改它的机制。此模式使用Java克隆来复制对象。

原型设计模式要求复制的对象应该提供复制特征。它不应该由任何其他类来完成。然而,使用对象属性的浅层还是深副本取决于需求,它是一个设计决策。

Structural Design Patterns - 结构设计模式

结构模式提供了创建类结构的不同方法,例如使用继承和组合从小对象创建大对象。

Adapter Pattern - 适配器模式

适配器设计模式用于使两个不相关的接口一起工作。连接这些不相关接口的对象称为适配器。作为一个现实生活中的例子,我们可以把移动充电器看作一个适配器,因为移动电池需要3伏特的电压来充电,但是普通的插座可以产生120V(美国)或240V(印度)。因此,移动充电器作为移动充电插座与墙壁插座之间的适配器。

Composite Pattern - 组合模式

组合模式是结构设计模式中的一种,在表示一个整体的层次结构时使用。当我们需要以必须以相同的方式对待结构中的对象的方式创建结构时,我们可以应用复合设计模式。

让我们用一个真实的例子来理解它——图表是由诸如圆、线、三角形等对象组成的结构,当我们用颜色(比如红色)填充绘图时,相同的颜色也会应用到绘图中的对象。这里的画是由不同的部分组成的,它们都有相同的操作。java中的HasSet和HashMap是经典的组合模式例子之一。

Proxy Pattern - 代理模式

代理模式意图是“为另一个对象提供代理或占位符来控制对它的访问”。定义本身非常清晰,当我们希望提供功能性的受控访问时,使用代理模式。

假设我们有一个类,可以在系统上运行一些命令。现在,如果我们正在使用它,这是可以的,但是如果我们想把这个程序交给客户端应用程序,它可能会有严重的问题,因为客户端程序可以发出命令来删除一些系统文件或更改一些您不希望的设置

Flyweight Pattern - 享元模式

当我们需要创建一个类的许多对象时,我们使用了享元设计模式。由于每个对象都消耗对诸如移动设备或嵌入式系统之类的低内存设备至关重要的内存空间,所以可以应用享元模式通过共享对象来减少内存的负载。Java中的字符串池实现是实现享元模式模式的最好例子之一。

Facade Pattern - 门面模式

外观模式用于帮助客户端应用程序轻松地与系统交互。假设我们有一个具有一组接口的应用程序来使用MySql/Oracle数据库并生成不同类型的报告,如HTML报告、PDF报告等。现在,客户端应用程序可以使用这些接口来获得所需的数据库连接并生成报告。但是,当复杂性增加或接口行为名称混淆时,客户端应用程序将发现很难对其进行管理。因此,我们可以在这里应用外观模式,并在现有接口的顶部提供包装器接口,以帮助客户端应用程序。

Bridge Pattern - 桥接模式

当我们在接口和实现中都具有接口层次结构时,则使用桥接设计模式将接口与实现解耦,并从客户端程序中隐藏实现细节。与适配器模式一样,它也是结构设计模式之一。

桥接设计模式的实现遵循构图优于继承的概念。

Decorator Pattern - 装饰者模式

装饰器设计模式用于在运行时修改对象的功能。同时,同一类的其他实例将不受此影响,因此单个对象得到修改后的行为。装饰设计模式是结构设计模式(如适配器模式、桥接模式、组合模式)之一,使用抽象类或与组合的接口来实现。

我们使用继承或组合来扩展对象的行为,但是这是在编译时完成的,并且它适用于类的所有实例。在运行时,我们不能添加任何新的功能来删除任何现有的行为——这是装饰模式出现的时候。

Behavioral Design Patterns - 行为设计模式

行为模式为对象之间更好的交互提供了解决方案,以及如何提供容易丢失的耦合和灵活性。

Template Method Pattern - 模板方法模式

模板方法是一种行为设计模式,用于创建方法存根,并将一些实现步骤推迟到子类。模板方法定义了执行算法的步骤,并且它可以提供所有子类或一些子类都通用的默认实现。

假设我们想提供一种建造房子的算法。建造房屋、建造柱子、建造墙壁和窗户需要采取措施。重要的一点是,我们不能改变执行顺序,因为我们不能在建立基础之前建立窗口。因此,在这种情况下,我们可以创建一个模板方法来使用不同的方法来构建房子。

Mediator Pattern - 中介者模式

中介器设计模式用于在系统中的不同对象之间提供集中式通信介质。调制解调器设计模式在多个对象相互作用的企业应用程序中非常有用。如果对象直接与对方交流,系统组件彼此紧密耦合,使维护成本高、不灵活,易于扩展。调停者模式侧重于提供对象沟通和帮助实施失去了对象之间的耦合之间的中介。

空中交通管制员是中介者模式在机场控制室的工作作为一个不同的航班之间通信介质的一个很好的例子。中介器充当对象之间的路由器,它可以有自己的逻辑来提供通信方式。

Chain of Responsibility Pattern - 责任链模式

责任链模式是用来实现松散耦合软件设计中,从客户端的请求传递给一个对象链中处理。然后,链中的对象将决定他们谁将处理请求和请求是否需要发送给链中的下一个对象或不。

我们知道在一个尝试catch块代码中可以有多个catch块。在这里,每个catch块都是处理特定异常的处理器。因此,当在尝试块中出现任何异常时,它被发送到第一个catch块进行处理。如果catch块不能处理它,它将请求转发到链中的下一个对象,即下一个catch块。如果即使最后一个catch块不能处理它,则异常也会被抛出到调用程序之外的链中。利用责任链模式实现ATM分发机逻辑。

Observer Pattern - 观察者模式

当您对对象的状态感兴趣并且希望随时得到通知时,观察器设计模式非常有用。在观察者模式中,监视另一个对象状态的对象称为观察者,而正在监视的对象称为Subject。

Java提供了通过Java.UTL可观察类和JavaUTIL观察器接口实现观察者模式的内置平台。然而,它没有被广泛使用,因为实现非常简单,而且大多数时候我们不想结束一个类只是为了实现观察者模式,因为Java不能在类中提供多重继承。

Java消息服务(JMS)使用观察者模式和中介模式来允许应用程序订阅和发布数据到其他应用程序。

Strategy Pattern - 策略模式

当针对特定任务我们有多个算法并且客户端决定在运行时使用的实际实现时,将使用策略模式。

战略模式也被称为政策模式。我们定义了多个算法,并让客户端应用程序将算法作为参数使用。这种模式的最好例子之一是采用接收Comparator参数的Collections.sort() 方法。基于比较器接口的不同实现,对象以不同的方式进行排序

Command Pattern - 命令模式

命令模式用于实现请求响应模型中的丢失耦合。在命令模式中,请求被发送给调用程序,调用程序将其传递给封装的命令对象。命令对象将请求传递给接收器的适当方法以执行特定的操作。

假设我们希望为文件系统实用程序提供打开、写入和关闭文件的方法,并且它应该支持多个操作系统,如Windows和Unix。

为了实现我们的文件系统实用程序,首先我们需要创建将真正完成所有工作的接收器类。由于我们用Java接口编写代码,所以我们可以有FileSystemReceiver 接口,它可以实现Windows、UNIX、Solaris等不同的操作系统调味品的实现类。

State Pattern - 状态模式

当对象根据其内部状态改变其行为时,使用状态设计模式

如果我们必须基于对象的状态来改变它的行为,我们可以在对象中设置一个状态变量,并使用if-else条件块来基于状态执行不同的操作。状态模式用于通过上下文和状态实现提供一种系统的和失去耦合的方式来实现这一目的。

Visitor Pattern - 访问者模式

当我们必须对一组类似的对象执行操作时,使用访问者模式。在访问者模式的帮助下,我们可以将操作逻辑从对象移动到另一个类。

例如,考虑一个购物车,在那里我们可以添加不同类型的项目(元素),当我们点击结账按钮时,它计算要支付的总额。现在我们可以在项目类中拥有计算逻辑,或者我们可以使用访问者模式把这个逻辑移到另一个类。让我们在访问者模式的例子中实现这一点。

Interpreter Pattern - 解析器模式

用于定义语言的语法表示,并提供解释器来处理该语法

这种模式的最好例子是Java编译器,它将Java源代码解释成可以由JVM理解的字节码。Google Translator也是一个解释器模式的示例,其中输入可以是任何语言,我们可以用另一种语言解释输出。

Iterator Pattern - 迭代器模式

一种行为模式中的迭代器模式,它用于提供遍历一组对象的标准方法。迭代器模式广泛应用于Java集合框架中,迭代器接口提供遍历集合的方法。

迭代器模式不仅涉及遍历集合,我们还可以根据需要提供不同类型的迭代器。迭代器模式隐藏遍历集合和客户端程序的实际实现,只使用迭代器方法。

Memento Pattern - 备忘录模式

当我们想要保存一个对象的状态以便以后恢复时,我们使用了备忘录模式。Memento模式用于实现这种方式,即对象的保存状态数据在对象外部不可访问,这保护了保存的状态数据的完整性

纪念品模式是用两个对象来实现的:始发者和看守人。始发者是状态需要保存和恢复的对象,它使用一个内部类来保存对象的状态。内部类被称为Memento,它是私有的,因此它不能从其他对象访问。事务的回滚实现似乎应用了备忘录模式?

猜你喜欢

转载自blog.csdn.net/topdeveloperr/article/details/83307189