Java设计模式(十二)桥接模式

栏目: 后端 · 发布时间: 7年前

内容简介:桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

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

桥接模式

桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

Java设计模式(十二)桥接模式

桥接模式包含如下角色:

(1) Abstraction:抽象类,抽象部分的接口。通常在这个对象里面,要维护一个实现部分的对象引用,在抽象对象里面的方法,需要调用实现部分的对象来完成。这个对象里面的方法,通常都是跟具体的业务相关的方法。Shape

(2) RefinedAbstraction:扩充抽象类,扩展抽象部分的接口,通常在这些对象里面,定义跟实际业务相关的方法,这些方法的实现通常会使用Abstraction中定义的方法,也可能需要调用实现部分的对象来完成。Circle

(3) Implementor:实现类接口,定义实现部分的接口,这个接口不用和 Abstraction 里面的方法一致,通常是由 Implementor 接口提供基本的操作,而 Abstraction 里面定义的是基于这些基本操作的业务方法,也就是说 Abstraction 定义了基于这些基本操作的较高层次的操作。DrawAPI

(4) ConcreteImplementor:具体实现类,真正实现 Implementor 接口的对象。GreenCircle、RedCircle

1、创建桥接实现接口

public interface DrawAPI {
    void drawCircle(int radius, int x, int y);
}

2、创建实现了 DrawAPI 接口的实体桥接实现类

public class GreenCircle implements DrawAPI {
    @Override
    public void drawCircle(int radius, int x, int y) {
        System.out.println("Drawing Circle[ color: green, radius: "
                + radius + ", x: " + x + ", " + y + "]");
    }
}
public class RedCircle implements DrawAPI {
    @Override
    public void drawCircle(int radius, int x, int y) {
        System.out.println("Drawing Circle[ color: red, radius: "
                + radius + ", x: " + x + ", " + y + "]");
    }
}

3、使用 DrawAPI 接口创建抽象类 Shape

public abstract class Shape {
    protected DrawAPI drawAPI;

    protected Shape(DrawAPI drawAPI) {
        this.drawAPI = drawAPI;
    }

    public abstract void draw();
}

4、创建实现了 Shape 接口的实体类

public class Circle extends Shape {
    private int x, y, radius;

    public Circle(DrawAPI drawAPI, int x, int y, int radius) {
        super(drawAPI);
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    @Override
    public void draw() {
        drawAPI.drawCircle(radius, x, y);
    }
}

5、使用 Shape 和 DrawAPI 类画出不同颜色的圆

public class BridgePatternMain {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedCircle(), 100, 100, 10);
        Shape greenCircle = new Circle(new GreenCircle(), 100, 100, 10);

        redCircle.draw();
        greenCircle.draw();

    }
}

桥接模式的优缺点:

优点:抽象和实现的分离;优秀的扩展能力;实现细节对客户透明。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

本文实现源码: https://github.com/wshunli/design-patterns/tree/master/src/ch12

参考资料

1、 Java 设计模式之十五(桥接模式) - CSDN博客

https://blog.csdn.net/shaopeng5211/article/details/8827507

2、JAVA设计模式之 桥接模式【Bridge Pattern】 - CSDN博客

https://blog.csdn.net/janice0529/article/details/44102637

3、java中的桥接模式 - 简书

https://www.jianshu.com/p/c71562c98258

4、讲故事,学(Java)设计模式—桥接模式 - ImportNew

http://www.importnew.com/6857.html

5、桥接模式 | 菜鸟教程

http://www.runoob.com/design-pattern/bridge-pattern.html

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 Java设计模式(十二)桥接模式 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。

本文链接: https://www.wshunli.com/posts/f75ecf9a.html


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

删除

删除

[英] 维克托•迈尔-舍恩伯格(Viktor Mayer-Schönberger)著 / 袁杰 译 / 浙江人民出版社 / 2013-1 / 49.90元

《删除》讲述了遗忘的美德,为读者展现了大数据时代的取舍之道。 《删除》从大数据时代信息取舍的目的和方法分别诠释了“被遗忘的权利”。维克托首先回溯了人类追寻记忆的过程,之后提出数字技术与全球网络正在瓦解我们天生的遗忘能力。对此,他考察了促进遗忘终止4大驱动力——数字化,廉价的存储器,易于提取,全球性访问。之后,他提出了当前数字化记忆的两大威胁——信息权力与时间,并给出了应对威胁的6大对策——数......一起来看看 《删除》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具