21xrx.com
2025-03-23 21:34:17 Sunday
文章检索 我的文章 写文章
不同类型的Java设计模式详解(含图片)
2023-06-18 10:41:56 深夜i     --     --
Java 设计模式 创建型 结构型 行为型 工厂模式 单例模式 适配器模式 装饰者

Java是一门流行的编程语言,拥有各种不同的应用场景。在Java编程中,设计模式是非常重要的概念。设计模式是一种经过实践验证的经验总结,它们可以用来解决常见的编程问题并提高代码的可维护性和可重用性。

在Java中,设计模式可以分为创建型、结构型和行为型三种类型。创建型模式是关于对象创建的模式,包括工厂模式、单例模式等;结构型模式是关于类和对象组合的模式,包括适配器模式、装饰者模式等;行为型模式是关于对象交互的模式,包括观察者模式、命令模式等。

下面将分别介绍不同类型的Java设计模式,并附有图片进行解释。

1.创建型设计模式

1.1 工厂模式

工厂模式是一种创建型设计模式,用于创建对象。它定义了一个统一的接口,用于创建对象,但由子类决定要实例化的类。以下是一个工厂模式的示意图:

(图片来源:https://www.javatpoint.com/design-patterns-in-java)

在这个示例中,ShapeFactory是一个工厂类,用于根据给定参数创建Shape类的对象。该类定义了一个静态方法getShape(),该方法通过接收参数来确定要创建哪种类型的Shape对象。

1.2 单例模式

单例模式是一种创建型设计模式,用于确保某个类只有一个实例,并提供访问该实例的全局点。以下是一个单例模式的示意图:

(图片来源:https://www.tutorialspoint.com/design_pattern/singleton_pattern.htm)

在这个示例中,SingleObject是一个单例类,用于提供唯一的对象实例。该类定义了一个静态方法getInstance(),该方法返回唯一的SingleObject实例。

2.结构型设计模式

2.1 适配器模式

适配器模式是一种结构型设计模式,用于将接口转换为另一个接口,以便客户端可以使用不兼容的类。以下是一个适配器模式的示意图:

(图片来源:https://www.tutorialspoint.com/design_pattern/adapter_pattern.htm)

在这个示例中,MediaPlayer是一个接口,定义了播放不同类型音频的方法。Mp4Player和VlcPlayer是两个不兼容的类,无法直接实现MediaPlayer接口。为了解决这个问题,我们创建了一个适配器类MediaAdapter,该类实现了MediaPlayer接口,并通过使用Mp4Player和VlcPlayer类来实现播放不同类型的音频。

2.2 装饰者模式

装饰者模式是一种结构型设计模式,用于动态地将责任附加到对象上。它提供了一种灵活的方式来扩展类的功能。以下是一个装饰者模式的示意图:

(图片来源:https://www.tutorialspoint.com/design_pattern/decorator_pattern.htm)

在这个示例中,Shape是一个接口,定义了绘制形状的方法。Circle和Rectangle是两个实现该接口的类。ShapeDecorator是一个抽象类,它实现了Shape接口,并通过一个Shape类型的变量来引用需要被装饰的对象。RedShapeDecorator和GreenShapeDecorator是两个具体的装饰者类,用于在原有的形状基础上添加红色或绿色边框。

3.行为型设计模式

3.1 观察者模式

观察者模式是一种行为型设计模式,用于在对象间建立发布-订阅关系。它定义了一种一对多的关系,使得一个对象状态改变时,所有其依赖的对象都会受到通知并自动更新。以下是一个观察者模式的示意图:

(图片来源:https://www.tutorialspoint.com/design_pattern/observer_pattern.htm)

在这个示例中,Subject是一个主题对象,用于管理订阅者列表和通知订阅者。具体的主题对象如Stock类和Weather类,它们维护了内部状态,并在状态改变时通知观察者。Observer是一个观察者接口,订阅者实现该接口,并在收到通知时更新自身。具体的观察者如StockObserver类和WeatherObserver类,它们实现了Observer接口,并根据不同的主题对象实现不同的更新方法。

3.2 命令模式

命令模式是一种行为型设计模式,用于将请求封装为独立的对象,并将请求发送给相应的处理程序。它允许我们将请求与接收请求的对象解耦,并能够支持撤销操作。以下是一个命令模式的示意图:

(图片来源:https://www.tutorialspoint.com/design_pattern/command_pattern.htm)

在这个示例中,Command是一个命令接口,定义了一个执行操作的方法。具体的命令类如BuyStock和SellStock实现了该接口,并有自己的执行方法。Broker是一个调用方对象,它维护一个命令列表,并通过addCommand()方法来添加命令。当需要执行命令时,Broker遍历命令列表,并依次执行每个命令。

  
  

评论区