Java设计模式-桥接模式

这篇具有很好参考价值的文章主要介绍了Java设计模式-桥接模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

桥接模式

1.桥接模式

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。

这个概念听着那是相当拗口了,其实通过例子解释后,就能很好的理解了。

2.代码示例

下面先看一个例子,这个例子表现了手机与手机软件之间的关系

2.1HandsetSoft类

这个类是手机软件的抽象类

public abstract class HandsetSoft {
    public abstract void run();
}

2.2HandSetGame类

这个是手机软件的具体实现类,游戏软件类

public class HandSetGame extends HandsetSoft{
    @Override
    public void run() {
        System.out.println("运行手机游戏");
    }
}

2.3WeChat类

这个是手机软件的具体实现类,微信软件类

public class WeChat extends HandsetSoft{
    @Override
    public void run() {
        System.out.println("运行手机微信");
    }
}

2.4HandsetBrand类

这个是手机品牌的抽象类,它里面有一个游戏软件的属性,这样不同的手机品牌就都可以使用软件了

public abstract class HandsetBrand {
    protected HandsetSoft soft;

    public void setSoft(HandsetSoft soft) {
        this.soft = soft;
    }

    public abstract void run();
}

2.5MIPhone类

这个是手机品牌的具体实现类,小米手机类

public class MIPhone extends HandsetBrand{
    @Override
    public void run() {
        System.out.print("小米手机" );
        soft.run();
    }
}

2.6IPhone类

这个是手机品牌的具体实现类,iphone类

public class IPhone extends HandsetBrand{
    @Override
    public void run() {
        System.out.print("苹果手机");
        soft.run();
    }
}

2.7测试类

public class MainApp {
    public static void main(String[] args) {
        HandsetBrand miPhone = new MIPhone();
        miPhone.setSoft(new HandSetGame());
        miPhone.run();
        miPhone.setSoft(new WeChat());
        miPhone.run();

        HandsetBrand iphone = new IPhone();
        iphone.setSoft(new WeChat());
        iphone.run();
    }
}

运行结果

小米手机运行手机游戏
小米手机运行手机微信
苹果手机运行手机微信

以上就是桥接模式的代码示例了,可以看到,我们这边给了两个抽象类,及两个抽象类各自的子类实现。在测试方法中,实例化手机品牌的对象,并将手机软件的具体子类,传入手机品牌的setSoft方法,目的是给手机安装软件,当调用手机品牌的run方法后,即可表示某个品牌运行某个手机软件了。

3.桥接模式UML类图

看到这里,可能还是有人好奇,这个桥接模式到底是啥,懵懵的,别着急,下面来看一下桥接模式的UML类图

Java设计模式-桥接模式,Java设计模式,java,设计模式,桥接模式

桥接模式,这个设计模式的名称中的这个桥,其实就是示例代码中两个有聚合关系的父类的这根聚合关系连接线,这跟线就像一座桥一样,连接两个抽象父类。

4.合成/聚合原则

在可能上面讲清楚了桥接模式中这个桥的含义,但是大家对桥接模式这个设计模式本身的功能还是有点模糊。这边先给大家介绍一个原则,叫合成/聚合原则。

合成/聚合原则,里面有两个意思,合成和聚合

  • 合成:是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。例如:鸡有两条腿,两个翅膀,一双眼睛等等,那么腿、翅膀、眼睛和鸡就是合成的关系,一个强拥有的关系,腿、翅膀、眼睛等,合成在一起,组成了鸡,和鸡有一样的生命周期,一旦鸡死了,那么翅膀、腿、眼睛等都可能独自生存,这就是合成关系。
  • 聚合:是一种弱拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分。例如一群大雁,每只大雁属于一个大雁群,一个大雁群可以拥有多只大雁,大雁群中的某只大雁可以脱离雁群独自生活。这就是聚合关系,A对象拥有B对象,但是B对象也可以独自存在。

这个原则和桥接模式有什么关系呢?其实桥接模式就很好的体现了这个原则中的聚合原则。

示例代码中,手机品牌的抽象类HandsetBrand抽象类中,包含HandsetSoft类对象,这样手机品牌的子类就可以从父类继承该HandsetSoft对象,这样的话,不同品牌的手机就可以自由安装不同的软件,而软件又可以独立于手机品牌独自存在。这样就将手机品牌和手机软件的耦合度降低了,当遇到新增新的软件或者新增新的手机品牌需求后,只需要新增手机品牌的子类或手机软件的子类,并在客户端调用一下,完全不会更改原有代码,即可实现新的需求。

这样的设计,也更加符合开放-封闭原则,对扩展开放,对修改关闭。

5.总结

为什么会出现桥接模式呢?因为在前面的学习中,我们一开始想到的扩展程序的方法一般都是使用类继承,但是当某个对象的组成维度比较复杂的时候,使用类继承,就会带来很多麻烦,比如侵入原有代码,类扩展不方便等。

这个时候,就要考虑放弃使用类继承,而改用合成/聚合,这样复杂的对象可以被简单化,将各自核心的组成部分相互独立开来,让它们各自变化,这样每种实现变化就都不会影响到其他的实现了,从而能够应对更多的变化。

某个对象的组成维度比较复杂的时候,使用类继承,就会带来很多麻烦,比如侵入原有代码,类扩展不方便等。

这个时候,就要考虑放弃使用类继承,而改用合成/聚合,这样复杂的对象可以被简单化,将各自核心的组成部分相互独立开来,让它们各自变化,这样每种实现变化就都不会影响到其他的实现了,从而能够应对更多的变化。

当我们实现一个系统模块的时候,如果这个模块可能有多个角度的分类,每一种分类都有可能变化,那么就把这多种角度分离出来让它们独立变化,减少它们之间的耦合。文章来源地址https://www.toymoban.com/news/detail-603326.html

到了这里,关于Java设计模式-桥接模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式之结构型-桥接模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、支付方式 4.2、支付渠道  五、总结 桥接模式(Bridge Pattern)是一种结构型设计模式,其主要目的是“将抽象部分与实现部分分离,使它们都可以独立地变化”。 桥接模式的核心思想是把抽象(abstraction)与实现

    2024年02月13日
    浏览(47)
  • 【设计模式——学习笔记】23种设计模式——桥接模式Bridge(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图 【对应类图】 【分析】 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。 违

    2024年02月15日
    浏览(43)
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式

    目录 一、代理模式 二、适配器模式 三、桥接模式 四、装饰模式 五、外观模式 六、享元模式 七、组合模式 概念: 代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对

    2023年04月09日
    浏览(52)
  • 完全从零Java自学系列【入门篇】(第四课:Mysql服务端安装&使用客户端操作数据库&初识SQL基础操作&Java中使用第三方包&Java数据库操作&初步理解面相对象真正的意义之桥接设计模式)

      数据库是专门用来存储一系列集合数据的地方。所有的文件都可以被称之为库,当应用场景没那么复杂的时候,简单的应用程序用文本就可以了。数据库的意义是为了设计更好的保障数据安全(如多线程操作)、数据一致、索引(如何在庞大的数据中快速查找)等等一系

    2024年02月21日
    浏览(62)
  • 设计模式 07 桥接模式

    桥接模式(Bridge Pattern)属于 结构型 模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为 柄体 (Handle and Body)模式或 接口 (Interface)模式。 比如需要创建电脑对象,市面上的电脑非常多, 品牌 有华为、苹果、联

    2024年02月11日
    浏览(58)
  • 设计模式详解-桥接模式

    类型:结构型模式 实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 主要解决:类变化频繁时用继承可能会出现的类爆炸问题。 如何解决:减少类的耦合关系,让类独立变化。

    2024年02月12日
    浏览(45)
  • 设计模式:桥接模式

    桥接模式(Bridge Pattern):旨在将抽象部分和实现部分解耦,使它们可以独立地变化。这种模式通过将抽象和实现分离,使它们可以独立地进行扩展和修改,而不会相互影响。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。 假如需要使用大

    2024年01月25日
    浏览(56)
  • 设计模式-桥接模式

    适配器模式 类似,以后也会遇到意思接近一样的设计模式。在开发中一般多个模式混用,且根据不同的场景进行搭配,桥接模式也是 结构型模式 将抽象的部分和实现的部分分离,使它们都可以独立的变化。通俗来说,就是通过组合来 桥接 其它的 行为或维度 与适配器模式业

    2024年02月11日
    浏览(47)
  • 【设计模式】桥接模式

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

    2024年02月13日
    浏览(65)
  • 设计模式——桥接模式

    引用 桥 我们大家都熟悉,顾名思义就是用来将河的两岸联系起来的。而此处的桥是用来将两个独立的结构联系起来,而这两个被联系起来的结构可以独立的变化,所有其他的理解只要建立在这个层面上就会比较容易。 基本介绍 桥接模式(Bridge)是指将实现与抽象放在两个不

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包