美文网首页
桥接模式

桥接模式

作者: leilifengxingmw | 来源:发表于2018-09-02 20:52 被阅读4次

喜欢上一个不喜欢你的人,那种可望不可及,放弃又不甘心的感觉,怎一个愁字了得。

桥接模式

定义:用于把抽象化和实现化解耦,使得二者可以独立变化。
我承认我不知道这个定义是啥意思,等以后有了更深的理解,再来补充。
举例说明 画图形
我们可以定义一个抽象类Shape,然后派生出长方形,三角形,圆形等等


Class Diagram.png

现在如果我们要画出不同颜色的各种形状,该怎么办呢?

  1. 第一种方式,就是直接从Shape派生各种颜色的形状。比如我们现在有红绿蓝三种颜色,那么类图会是这样的。


    Class Diagram (1).png

    如果现在有四个形状,四种颜色,那么,生成的子类数量就比较客观了。

  2. 第二种方式,根据实际需要对颜色和形状进行组合。提供两个父类一个是颜色、一个形状,颜色父类和形状父类两个类都包含了相应的子类,然后根据需要对颜色和形状进行组合。如下图所示。


    Class Diagram (2).png

Shape抽象类

package com.hm.pattern.bridge;

public abstract class Shape {

    Color color;

    public Shape(Color color) {
        this.color = color;
    }

    protected abstract void draw();
}

Rectangle

package com.hm.pattern.bridge;

public class Rectangle extends Shape {

    public Rectangle(Color color) {
        super(color);
    }

    @Override
    protected void draw() {
       color.drawColorShape("rectangle");
    }
}

Circle

package com.hm.pattern.bridge;

public class Circle extends Shape {

    public Circle(Color color) {
        super(color);
    }

    @Override
    protected void draw() {
        color.drawColorShape("circle");

    }
}

Triangle

package com.hm.pattern.bridge;

public class Triangle extends Shape {

    public Triangle(Color color) {
        super(color);
    }

    @Override
    protected void draw() {
        color.drawColorShape("triangle");
    }
}

Color抽象类

package com.hm.pattern.bridge;

public abstract class Color {

    abstract void drawColorShape(String shape);
}

Red

package com.hm.pattern.bridge;

public class Red extends Color {
    @Override
    void drawColorShape(String shape) {
        System.out.println("red:" + shape);
    }
}

Blue

package com.hm.pattern.bridge;

public class Blue extends Color {
    @Override
    void drawColorShape(String shape) {
        System.out.println("blue:" + shape);
    }
}

Green

package com.hm.pattern.bridge;

public class Green extends Color {
    @Override
    void drawColorShape(String shape) {
        System.out.println("green:" + shape);
    }
}

测试类

package com.hm.pattern.bridge;

public class BridgeTest {

    public static void main(String[] args) {

        Color red = new Red();
        Shape rectangle = new Rectangle(red);
        Shape circle = new Circle(red);

        Color blue = new Blue();

        Shape rectangleBlue = new Rectangle(blue);
        Shape circleBlue = new Circle(blue);

        rectangle.draw();
        circle.draw();

        rectangleBlue.draw();
        circleBlue.draw();
    }


}

输出

red:rectangle
red:circle
blue:rectangle
blue:circle

优点

  1. 分离抽象接口及其实现部分。提高了比继承更好的解决方案。
  2. 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
  3. 实现细节对客户透明,可以对用户隐藏实现细节。

缺点

  1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

使用场景

  1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
  2. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
  3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

先记录下来,在后续的学习研究中再不断补充。

参考链接

  1. 桥接模式
  2. 设计模式:桥接模式(Bridge)
  3. 设计模式读书笔记-----桥接模式

相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 桥接模式与中介模式

    桥接模式-BRIDGE 对桥接模式感兴趣,是因为公司业务上需要桥接Html5和ReactNative两个平台。桥接...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 桥接模式

    桥接模式 参考原文: https://zhuanlan.zhihu.com/p/62390221 定义 桥接模式 ...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

网友评论

      本文标题:桥接模式

      本文链接:https://www.haomeiwen.com/subject/hfgmwftx.html