其他分享
首页 > 其他分享> > 设计模式:桥接模式

设计模式:桥接模式

作者:互联网

桥接模式

概述

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

我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。

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

定义:

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

结构

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

案例

【例】视频播放器

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

类图如下:

image-20210124222335333

/**
 * @author WGR
 * @create 2021/1/22 -- 15:29
 */
public interface VideoFile {
    void decode(String fileName);
}


/**
 * @author WGR
 * @create 2021/1/22 -- 15:30
 */
public class AVIFile implements VideoFile {
    @Override
    public void decode(String fileName) {
        System.out.println("avi视频文件:"+ fileName);
    }
}


/**
 * @author WGR
 * @create 2021/1/22 -- 15:30
 */
public class MP4File implements VideoFile  {
    @Override
    public void decode(String fileName) {
        System.out.println("mp4视频文件:"+ fileName);
    }
}


/**
 * @author WGR
 * @create 2021/1/22 -- 15:31
 */
public abstract class OperatingSystemVersion {

    public  VideoFile videoFile;

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


    public abstract void play(String fileName);
}

/**
 * @author WGR
 * @create 2021/1/22 -- 15:40
 */
public class Mac extends OperatingSystemVersion {

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

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

/**
 * @author WGR
 * @create 2021/1/22 -- 15:39
 */
public class Windows extends OperatingSystemVersion {

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

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

/**
 * @author WGR
 * @create 2021/1/22 -- 15:41
 */
public class Test {
    public static void main(String[] args) {
        OperatingSystemVersion os = new Windows(new AVIFile());
        os.play("战狼3");
    }
}

image-20210124222604321

好处:

使用场景

标签:VideoFile,videoFile,桥接,模式,fileName,角色,设计模式,public
来源: https://www.cnblogs.com/dalianpai/p/14322720.html