桥接模式

定义

桥接模式是抽象的部分和它实现的部分分离,使得它们可以独立地变化,它是一种对象结构型模式。

案例

描述

电脑产品可以分为笔记本电脑,台式电脑和平板电脑。然后笔记本电脑根据品牌,可以分为苹果电脑,华为电脑,小米电脑。对台式电脑和平板电脑也是如此。

需求变动
1、需要新加入一个品牌
如果要新加入一个品牌,那么这个品牌对每个产品都进行生成,由此新增很多类
2、需要新加入一个产品
如果要新加入一个产品,那么这个产品也要被所有品牌实现,由此新增很多类

解决方式

这个场景中两个纬度的变化:品牌和电脑类型

可以通过组合的方式,组合出我们想要的产品和品牌

核心代码

/**
 * 抽象类可以有成员变量
 * 通过组合brand的方式实现
 */
public abstract class Computer {

    private Brand brand;

    public Computer(Brand brand) {
        this.brand = brand;
    }

    public String info() {
        return brand.info();
    }

    public abstract void introduce();
}

Comsumer类可以自己从两个纬度组合代码

    public static void main(String[] args) {
        new Notebook(new AppleBrand()).introduce();
        new Desktop(new XiaoMiBrand()).introduce();
        new Tablet(new HuaweiBrand()).introduce();
    }

UML图

关键
通过抽象类computer来组合接口Brand

优劣

优势

  • 桥接模式偶尔类似于多继承的方式,但是多继承方案违背了类的单一职责,复用性比较差,类的个数也比较多。桥接模式是比多继承更好的解决方案,极大的减少了子类的个数,从而降低了管理成本和维护成本。
  • 桥接模式提高了任务的可扩充性,在两个变化纬度中任意扩展一个纬度,都不需要修改原有系统。符合开闭原则,就像一座桥,把多个纬度连接了起来。

劣势

  • 桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
  • 桥接模式要求正确识别出系统中的两个独立变化的纬度,因此其使用范围具有一定的局限性。
posted @ 2020-09-17 19:50  刃牙  阅读(208)  评论(0编辑  收藏  举报