结构型模式
classDiagram
class Target
class Adapter
class Adaptee
Target <|-- Adapter
Adapter --> Adaptee : uses
note for Adapter "适配器模式结构"
作用
通过组合和继承构建更大的结构,保持灵活性和扩展性
本质
通过组合和继承构建更大的结构,保持灵活性和扩展性
模式分类
模式 | 用途 | 示例场景 |
---|---|---|
适配器 | 接口转换 | 旧系统集成 |
桥接 | 抽象与实现分离 | 跨平台UI开发 |
组合 | 树形结构处理 | 文件系统 |
装饰器 | 动态添加职责 | IO流处理 |
外观 | 简化复杂系统 | API网关 |
享元 | 共享细粒度对象 | 字符处理 |
代理 | 控制对象访问 | 远程代理 |
示例
// 适配器模式
interface MediaPlayer {
void play(String audioType, String fileName);
}
class Mp3Player implements MediaPlayer {
public void play(String audioType, String fileName) {
if ("mp3".equals(audioType)) {
System.out.println("播放MP3: " + fileName);
}
}
}
class MediaAdapter implements MediaPlayer {
private AdvancedMediaPlayer advancedPlayer;
public MediaAdapter(String audioType) {
if ("vlc".equals(audioType)) {
advancedPlayer = new VlcPlayer();
}
}
public void play(String audioType, String fileName) {
advancedPlayer.playVlc(fileName);
}
}
// 装饰器模式
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("画圆形");
}
}
abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
public void draw() {
decoratedShape.draw();
}
}
class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
public void draw() {
decoratedShape.draw();
setRedBorder();
}
private void setRedBorder() {
System.out.println("设置红色边框");
}
}
注意事项
- 适配器模式分为类适配器和对象适配器
- 装饰器模式可以在运行时添加功能
- 代理模式控制对象访问,可能延迟初始化
- 组合模式适合表示部分-整体层次结构
- 桥接模式通过组合代替多重继承