桥接模式更注重:两个可变维度的拓展 不能用继承 容易造成类爆炸

四个角色:实现化 (定义接口方法 ) 具体实现化 implement实现化接口 并重写方法

抽象化 :聚合实现化接口 并初始化 重写方法 调用方法(接口对象 调用 指向实现类->多态)

拓展抽象化 :实现抽象化 重写方法 调用方法( 实现化接口对象   调用的还是初始 拓展抽象化对象实例的时候传递的 具体实现化 对象)

package com.qf.bridgedemo;

//实现化角色
public interface VideoFile {
    //定义实现化角色的接口,供扩展抽象化角色调用
    void decode(String fileName);
}



package com.qf.bridgedemo;

//avi文件
public class AVIFile implements VideoFile {
    @Override
    public void decode(String fileName) {
        System.out.println("avi 文件 " + fileName);
    }
}


package com.qf.bridgedemo;

//rmvb文件
public class RMVBFile implements VideoFile {
    @Override
    public void decode(String fileName) {
        System.out.println("rmvb文件" + fileName);
    }
}




package com.qf.bridgedemo;

//操作系统版本  抽象化角色
public abstract class OperatingSystemVersion {
    //聚合 对是实现化的引用
    protected VideoFile videoFile;

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

    //抽象化角色 中的方法
    public abstract void play(String fileName);

}




package com.qf.bridgedemo;

//window版本 拓展抽象化角色
public class Windows extends OperatingSystemVersion {
    //初始化的时候构件实现化类对象
    public Windows(VideoFile videoFile) {
        super(videoFile);
    }

    //重写 抽象化方法
    @Override
    public void play(String fileName) {
        videoFile.decode(fileName);
    }
}



package com.qf.bridgedemo;

//拓展抽象化角色
public class Mac extends OperatingSystemVersion {
    public Mac(VideoFile videoFile) {
        super(videoFile);
    }

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

总结:两个独立变化的维度 拓展的时候 推荐使用桥接模式

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐