其他分享
首页 > 其他分享> > 第 12 章 桥接模式

第 12 章 桥接模式

作者:互联网

资料来源于 哔哩哔哩 黑马教程 Java 设计模式

12.1 概述

现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。可以利用继承的方式来设计类的关系:

可以发现有很多的类,假如再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,此时可以考虑使用桥接模式。

定义:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

12.2 结构

桥接(Bridge)模式包含以下主要角色:

12.3 案例-视频播放器

需要开发一个=跨平台视频播放器,可以在不同操作系统平台(如Windows、Mac、Linux等)上播放多种格式的视频文件,常见的视频格式包括 RMVB、AVI、WMV 等。该播放器包含了两个维度,适合使用桥接模式。

12.3.1 类图如下

12.3.2 代码如下

1) 视频文件

public interface VideoFile {
    void decode(String fileName);
}

2) avi 文件 & rmvb 文件

public class AVIFile implements VideoFile {
    public void decode(String fileName) {
        System.out.println("avi视频文件:"+ fileName);
    }
}
public class REVBBFile implements VideoFile {

    public void decode(String fileName) {
        System.out.println("rmvb文件:" + fileName);
    }
}

3) 操作系统版本

public abstract class OperatingSystemVersion {

    protected VideoFile videoFile;

    public OperatingSystemVersion(VideoFile videoFile) {
        this.videoFile = videoFile;
    }

    public abstract void play(String fileName);
}

4) Windows 版本 & mac 版本

public class Windows extends OperatingSystem {

    public Windows(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
        videoFile.decode(fileName);
    }
}
public class Mac extends OperatingSystemVersion {

    public Mac(VideoFile videoFile) {
        super(videoFile);
    }

    public void play(String fileName) {
	videoFile.decode(fileName);
    }
}

5) 测试类

public class Client {
    public static void main(String[] args) {
        OperatingSystem os = new Windows(new AVIFile());
        os.play("战狼3");
    }
}

6) 好处

12.4 使用场景

标签:12,VideoFile,videoFile,桥接,模式,fileName,角色,维度,public
来源: https://www.cnblogs.com/miaomiaowu/p/14980541.html