跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

结构型模式

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("设置红色边框");
    }
}

注意事项

  • 适配器模式分为类适配器和对象适配器
  • 装饰器模式可以在运行时添加功能
  • 代理模式控制对象访问,可能延迟初始化
  • 组合模式适合表示部分-整体层次结构
  • 桥接模式通过组合代替多重继承