开发者社区> 兴化> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

设计模式-5-桥接模式

简介: 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
+关注继续查看

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

太难理解啦,举个例子说明,我们的笔可以画一个长方形、也可以画圆形,我们可以画白色的,也可以画红色的。假如需求只是这两种图形和颜色,无后续变化那么我们的图是这样的:

图片

       但是需求要是变化的话,比如要画正方形、颜色也要加绿色,那我们就要在形状和颜色两个维度上同时增加变化,最终就会无线叠加,所以我们换一种方案:将图形和颜色作为两个父类,然后对父类下的子类进行组合,如图:

图片

       我们不管是要画白色的正方形还是红色的圆形,组合两个子类就好,不需要给每个图形都给一个加颜色的方法啦,即使要画别的图形或别的颜色,我们直接加子类即可,这个模式就是桥接模式。

       本来图形接口中要加多个画不同颜色的方法,然后图形类继承实现,但是现在把颜色抽出来啦,由原来的继承关系变成了现在的关联关系,这就是实现了脱耦!这也是桥接模式的目的。

代码实现:

一、建立颜色的接口和实现类:

package com.xing.design.bridge;
/**
 * 颜色
 * @author xing
 */
public interface Color {
/**
   *  涂色
   * @param shape 图形
   */
public void bepaint(String shape);
}
package com.xing.design.bridge;
public class White implements Color{
@Override
public void bepaint(String shape) {
    System.out.println("白色的"+shape);
  }
}
package com.xing.design.bridge;
public class Red implements Color{
@Override
public void bepaint(String shape) {
    System.out.println("红色的"+shape);
  }
}

二、再搞个画图形抽象类

package com.xing.design.bridge;
/**
 *  画图形抽象类
 * @author xing
 * @createTime
 */
public abstract class Shape {
  Color color;
public void setColor(Color color) {
this.color = color;
    }
/**
     * 画
     */
public abstract void draw();
}
    实现一个画圆形的:
package com.xing.design.bridge;
public class Circle extends Shape{
@Override
public void draw() {
        color.bepaint("画圆形");
    }
}
    再来一个画矩形的:
package com.xing.design.bridge;
public class Rectangle extends Shape{
@Override
public void draw() {
        color.bepaint("正方形");
    }
}

三、画两个有颜色的图形:

package com.xing.design.bridge;
public class BridgeDemo {
public static void main(String[] args) {
//白色
        Color white = new White();
//红色
        Color red = new Red();
//圆形
        Circle circle = new Circle();
//正方形
        Rectangle rectangle = new Rectangle();
        System.out.print("画个白色的正方形:");
        rectangle.setColor(white);
        rectangle.draw();
        System.out.print("再画个红色的正方形:");
        rectangle.setColor(red);
        rectangle.draw();
        System.out.print("再画个红色的圆形:");
        circle.setColor(red);
        circle.draw();
  }
}

       上例中,我们通过桥接模式将画图形和颜色在抽象层建立一个关联关系,实现了抽象化与实现化的脱耦。他们两个互相独立,不会影响到对方。

图片

       桥接模式和装饰器模式好像看起来差不多,不过区别还是蛮大的,装饰器模式只是对现有对象再不改变其原始结构的情况下进行了功能性的单维度增强,对现有对象进行包装来提供额外的功能。而桥接模式是对两个维度的抽象层次建立关联关系,使得抽象化与实现化脱耦,使得两者可以独立的变化。

       桥接中的行为是横向的行为,行为彼此之间无关联;而装饰者模式中的行为具有可叠加性,其表现出来的结果是一个整体,一个各个行为组合后的一个结果。


总结:

       桥接模式就是用在抽象层的关联关系(图形和颜色抽象层次关联)代替继承关系,把多变化给分离出来(如图形无限多,颜色也无限多),让它们独立变化,减少它们之间耦合。



END

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
23种设计模式——桥接模式
所谓桥接模式就是将抽象部分和实现部分隔离开来,使得它们能够独立变化。
11 0
设计模式(14) -- 桥接模式
设计模式(14) -- 桥接模式
12 0
【设计模式】C#实现桥接模式
将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
27 0
设计模式是什么鬼(桥接)
设计模式是什么鬼(桥接)
46 0
设计模式
设计模式
1630 0
设计模式
设计模式概论   1. 设计模式          设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
793 0
设计模式
设计模式是一套理论与经验,它可以提高代码的可重用性、可维护性。比如需求经常变,实现模块之间的松耦合就可以方便维护。  依赖倒置原则 依赖倒置原则,简单说就是面向接口编程。可以减少类间的耦合性,有利于并行开发。 设想这样一个场景:甲负责汽车类的建造,乙负责司机类的建造。在甲没有完成的情况下,乙是不能完全地编写代码的,缺少汽车类,编译器根本就不会让你通过!   两个类之间有依赖关系,
1263 0
设计模式
设计模式(Design Pattern)是一整套被反复使用,多数人知晓的,经过分类编目的代码设计经验的总结。
635 0
+关注
兴化
码中自由一片天地。。。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载