Java设计模式之结构型模式详解
发布时间: 2023-12-17 05:03:01 阅读量: 15 订阅数: 17 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
# 1. 引言
## 1.1 什么是Java设计模式
设计模式是在软件设计中常用的解决问题的一种方法或者思路,这些设计模式是经过了实践和大量的总结得出的一种被普遍认可的最佳实践。Java设计模式包括了23种设计模式,它们分别属于三种类型:创建型模式、结构型模式和行为型模式。
## 1.2 为什么要使用设计模式
使用设计模式可以提高代码的可重用性、可维护性和可扩展性。设计模式提供了一种标准化的解决方案,使得代码更易于理解和维护。此外,使用设计模式可以提高代码的效率,减少犯错的可能性。
## 1.3 结构型模式的作用
结构型模式是Java设计模式中的一种类型,它主要关注类和对象之间的组合。结构型模式可以将类和对象以某种方式组织起来,以达到更好的结构和设计。它通过将类和对象组织成更大的结构,从而实现更高层次的抽象和复杂性管理。
在本文中,我们将重点介绍五种常见的结构型模式: 适配器模式、装饰器模式、外观模式、代理模式和组合模式。
# 2. 适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的对象之间合作。适配器模式可以将一个类的接口转换为客户端所期望的另一个接口。这种适配器模式通常用于需要复用一些现存的类,但接口与需求不符合的情况。
#### 2.1 概述
适配器模式的核心思想是创建一个新的适配器类,该类实现客户端所期望的目标接口,并持有一个对旧接口的引用。通过将客户端的请求委派给旧接口的实现来实现目标接口的行为,从而实现了接口之间的适配。
#### 2.2 适用场景
- 当需要使用一个已经存在的类,但它的接口不符合需求时
- 当需要创建一个可复用的类,该类与其他不相关的或不可预见的类协作
#### 2.3 实现方法
适配器模式可以通过对象适配器和类适配器两种方式实现。对象适配器使用组合的方式持有一个旧接口的引用,而类适配器则使用多重继承等方式实现接口的适配。
#### 2.4 实例分析
假设我们有一个音乐播放器,它只能播放MP3格式的音乐,但是现在有一些其他格式的音乐(比如MP4、WAV等),我们需要通过适配器模式来实现适配。
```java
// 目标接口
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
// 旧接口
public interface AdvancedMediaPlayer {
public void playMp4(String fileName);
public void playWav(String fileName);
}
// 适配器类
public class MediaAdapter implements MediaPlayer {
private AdvancedMediaPlayer advancedMusicPlayer;
public MediaAdapter(String audioType) {
if (audioType.equalsIgnoreCase("mp4")) {
advancedMusicPlayer = new Mp4Player();
} else if (audioType.equalsIgnoreCase("wav")) {
advancedMusicPlayer = new WavPlayer();
}
}
public void play(String audioType, String fileName) {
if (audioType.equalsIgnoreCase("mp4")) {
advancedMusicPlayer.playMp4(fileName);
} else if (audioType.equalsIgnoreCase("wav")) {
advancedMusicPlayer.playWav(fileName);
}
}
}
```
在上面的示例中,我们通过适配器模式创建了 `MediaAdapter` 类来实现 `MediaPlayer` 接口,该适配器类持有对 `AdvancedMediaPlayer` 接口的引用,并根据需要调用不同的方法来实现对不同音乐格式的播放。
这个例子清楚地展示了适配器模式的作用和实现方法。
# 3. 装饰器模式
装饰器模式是一种结构型设计模式,允许向对象动态添加新功能,而不必更改其原始代码。这种模式能够有效地组合对象,以便无需使用子类就能添加新行为。
### 概述
装饰器模式通过将对象包装在装饰器类的实例中来扩展其行为。这种模式允许逐渐添加功能,而不是一次性对整个对象进行改动。
### 适用场景
装饰器模式通常在以下情况下使用:
- 当需要扩展一个类的功能,而继承会导致子类数量急剧增加时。
- 当要动态地为对象添加功能,而不会影响其他对象时。
### 实现方法
装饰器模式通常涉及以下角色:
1. **Component(组件)**:定义一个对象接口,可以动态地给这个接口添加职责。
2. **ConcreteComponent(具体组件)**:实现Component接口的对象,是被装饰的原始对象。
3. **Deco
0
0
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)