桥接模式

时间:2020-06-07 18:55:23   收藏:0   阅读:45

桥接模式bridge

桥接模式是抽象部分与它的实现部分分离, 使他们可以独立的变化, 它是一种对象结构模式, 又称为柄体(handle and Body)模式或接口(Interface)模式 .桥接模式可以和适配器模式连用

案例

思考

例如下图的继承关系

技术分享图片

当我想增加一个新的品牌时, 比如神州品牌, 需要同时为台式, 笔记本和平板都要添加一个类, 过程比较繁琐, 这只是3中类型, 如果更多的类型, 那么工作量时非常巨大的

这时我们可以把电脑类型和品牌看成一个坐标系:(如下图)

技术分享图片

图中每一个x轴和y轴的交点都可以表示一种类型的品牌电脑, 我们只需要想办法把类型和品牌联系起来(桥接), 就可以按照需求把电脑组装出来, 这样就降低了维护成本, 如果我想添加一个电脑类型, 只需要在y轴添加一种即可, 添加品牌只需要在x轴添加, 然后根据自己的需要组装电脑.

代码案例

Brand品牌的接口

// 品牌
public interface Brand {
    void info();
}

Apple苹果品牌, 实现品牌接口Brand

// 苹果品牌
public class Apple implements Brand {
    @Override
    public void info() {
        System.out.print("苹果"); // 打印品牌信息
    }
}

Lenovo联想品牌, 实现品牌接口Brand

// 联想品牌
public class Lenovo implements Brand {
    @Override
    public void info() {
        System.out.print("联想"); // 打印品牌信息
    }
}

Computer电脑抽象类, 使用品牌和类型组装 (可以为普通类)

public abstract class Computer {
    // 组合, 品牌, 起到桥接作用
    protected Brand brand;

    // 有参构造
    public Computer(Brand brand) {
        this.brand = brand;
    }

    // 电脑的info(), 调用品牌Brand的info()
    public void info() {
        brand.info();// 自带品牌
    }
}

Desktop台式机类, 继承Computer抽象类

class Desktop extends Computer {
    public Desktop(Brand brand) {
        super(brand);
    }

    @Override // 重写电脑Computer的info()
    public void info() {
        super.info();
        System.out.println("台式机");
    }
}

Laptop笔记本电脑类, 继承Computer抽象类

class Laptop extends Computer {
    public Laptop(Brand brand) {
        super(brand);
    }

    @Override // 重写电脑Computer的info()
    public void info() {
        super.info();
        System.out.println("笔记本");
    }
}

测试类Test

public class Test {
    public static void main(String[] args) {
        // 按照需求组装出对应的电脑
        // 苹果笔记本
        Computer computer = new Laptop(new Apple());
        computer.info();
        // 联想台式机
        Computer computer1 = new Desktop(new Lenovo());
        computer1.info();
    }
}

运行结果:

苹果笔记本
联想台式机

结构示意图: 这样电脑类型和品牌之间就建立了联系, 这就是桥接

技术分享图片

优缺点

好处:

劣势:

最佳实践:

场景

原文:https://www.cnblogs.com/zpKang/p/13061507.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!