Java设计模式以虹猫蓝兔的故事讲解桥接模式

 更新时间:2022年04月21日 16:56:40   作者:桃花键神  
桥接是用于把抽象化与实现化解耦,使二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响

模式: 桥接模式

案例: 蓝兔宫主买裙子

什么是桥接模式

桥接(Bridge)模式的定义如下: 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

优点

1、抽象与实现分离,扩展能力强

2、符合开闭原则

3、符合合成复用原则

4、其实现细节对客户透明

缺点

由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

知识点

可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。

桥接模式实现

案例: 蓝兔宫主买裙子

裙子分两个维度,分别是颜色和样式。

颜色有黄色和红色;

样式分长裙和短裙;

抽象化(Abstraction)角色: 颜色

扩展抽象化(Refined Abstraction)角色: 黄色和红色

实现化(Implementor)角色: 样式

具体实现化(Concrete Implementor)角色: 长裙和短裙

颜色

颜色接口,声明一个show()抽象方法

public interface Color {
    void show();
}

黄色

黄色类并实现颜色接口

public class ColorYellow implements Color {
    @Override
    public void show() {
        System.out.println("黄色的");
    }
}

红色

红色类并实现颜色接口

public class ColorRed implements Color {
    @Override
    public void show() {
        System.out.println("红色的");
    }
}

裙子

裙子类,声明一个颜色属性和一个抽象方法

abstract class Qun {
    protected Color color;
    protected Qun() {
    }
    protected Qun(Color color) {
        this.color = color;
    }
    public abstract void shows();
}

长裙

继承裙子类,并实现抽象方法

public class QunChang extends Qun {
    protected QunChang() {
    }
    protected QunChang(Color color) {
        super(color);
    }
    @Override
    public void shows() {
        System.out.println("长裙");
        color.show();
    }
}

短裙

继承裙子类,并实现抽象方法

public class QunDuan extends Qun {
    protected QunDuan() {
    }
    protected QunDuan(Color color) {
        super(color);
    }
    @Override
    public void shows() {
        System.out.println("短裙");
        color.show();
    }
}

测试

new一个红色对象作为参数传给长裙。

public class Demo {
    public static void main(String[] args) {
        Color color = new ColorRed();
        Qun qun = new QunChang(color);
        qun.shows();
    }
}

总结

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。

到此这篇关于Java设计模式以虹猫蓝兔的故事讲解桥接模式的文章就介绍到这了,更多相关Java桥接模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javaweb判断当前请求是否为移动设备访问的方法

    javaweb判断当前请求是否为移动设备访问的方法

    这篇文章主要为大家详细介绍了javaweb判断当前请求是否为移动设备访问的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 浅析Java中并发工具类的使用

    浅析Java中并发工具类的使用

    在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种方法。本文主要介绍了它们的使用,需要的可以参考一下
    2022-12-12
  • Intellij搭建springmvc常见问题解决方案

    Intellij搭建springmvc常见问题解决方案

    这篇文章主要介绍了Intellij搭建springmvc常见问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java防盗链在报表中的应用实例(推荐)

    java防盗链在报表中的应用实例(推荐)

    下面小编就为大家带来一篇java防盗链在报表中的应用实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java中的关键字_动力节点Java学院整理

    Java中的关键字_动力节点Java学院整理

    关键字也称为保留字,是指Java语言中规定了特定含义的标示符。对于保留字,用户只能按照系统规定的方式使用,不能自行定义
    2017-04-04
  • JAVA中的OutputStreamWriter流解析

    JAVA中的OutputStreamWriter流解析

    这篇文章主要介绍了JAVA中的OutputStreamWriter流解析,OutputStreamWriter提供了一种方便的方式将字符数据写入到输出流中,并进行字符编码转换,它是Java中处理字符流和字节流之间转换的重要工具之一,需要的朋友可以参考下
    2023-10-10
  • Kotlin基础教程之数据类型

    Kotlin基础教程之数据类型

    这篇文章主要介绍了Kotlin基础教程之数据类型的相关资料,需要的朋友可以参考下
    2017-05-05
  • 解决SpringBoot框架因post数据量过大没反应问题(踩坑)

    解决SpringBoot框架因post数据量过大没反应问题(踩坑)

    这篇文章主要介绍了解决SpringBoot框架因post数据量过大没反应问题(踩坑),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringMVC拦截器运行原理及配置详解

    SpringMVC拦截器运行原理及配置详解

    这篇文章主要介绍了SpringMVC拦截器运行原理及配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java Ribbon与openfeign区别和用法讲解

    Java Ribbon与openfeign区别和用法讲解

    Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具,主要功能是提供客户端的软件负载均衡算法和服务调用。openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便
    2022-08-08

最新评论