我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java中的桥接模式是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java中的桥接模式是什么

本篇内容主要讲解“java中的桥接模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的桥接模式是什么”吧!

目录
  • 引例

  • 桥接模式

  • 实战示例

    • 代码:

  • 总结

    引例

    需求:对不同手机类型的不同品牌(比如按键手机:诺基亚、翻盖手机:纽曼、智能手机:华为、小米)实现操作编程(比如: 开机、关机、打电话)。

    先来说说一般解法:将不同手机类型继承父类手机,最后各个品牌再继承对应手机类型:

    java中的桥接模式是什么

    弊端:乍一看没问题,但其实不易扩展(类爆炸),如果增加新的手机类型(比如新兴的折叠式),就需要增加各个手机品牌的类去继承(比如已继承智能手机的华为小米)。同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,维护成本高。

    解决方案就是下面的主角:桥接模式。

    桥接模式

    桥接模式(Bridge)是一种结构型设计模式。顾名思义,就像搭个桥连接起来,通过使用封装、聚合及继承等行为让不同的类承担不同的职责,将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变,保持各部分的独立性以及应对他们的功能扩展。

    原理类图:

    java中的桥接模式是什么

    • Client类:客户端调用

    • Abstraction抽象类:充当桥接类,维护了Implementor接口(即它的实现类ConcreteImplementorA…)

    • RefindAbstraction类:是抽象类的子类

    • Implementor接口:行为实现接口

    • ConcreteImplementorA/B类:行为的具体实现类

    从UML类图看出,抽象类和接口是聚合的关系,即调用和被调用的关系。如此一来搭好桥后,具体实现类调用方法=》父类抽象类的方法=》行为接口方法=》具体接口行为实现类,以完成连接,同时两者又相互独立易扩展:

    java中的桥接模式是什么

    实战示例

    用桥接模式来解决引例的实际问题。

    类图:

    java中的桥接模式是什么

    代码:

    //接口public interface Brand {void open(); //开机void close(); //关机void call();//打电话}//接口实现类public class NOKIA implements Brand{    @Override    public void open() {        System.out.println("诺基亚手机开机");    }    @Override    public void close() {        System.out.println("诺基亚手机关机");    }    @Override    public void call() {        System.out.println("诺基亚手机打电话");    }}public class Newsmy implements Brand{    @Override    public void open() {        System.out.println("纽曼手机开机");    }    @Override    public void close() {        System.out.println("纽曼手机关机");    }    @Override    public void call() {        System.out.println("纽曼手机打电话");    }}public class Huawei implements Brand{    @Override    public void open() {        System.out.println("华为手机开机");    }    @Override    public void close() {        System.out.println("华为手机关机");    }    @Override    public void call() {        System.out.println("华为手机打电话");    }}public class Xiaomi implements Brand{    @Override    public void open() {        System.out.println("小米手机开机");    }    @Override    public void close() {        System.out.println("小米手机关机");    }    @Override    public void call() {        System.out.println("小米手机打电话");    }}
    //抽象类public abstract class Phone {private Brand brand;//手机品牌接口public Phone(Brand brand) {//构造器super();this.brand = brand;}public void open() {this.brand.open();}public void close() {this.brand.close();}public void call() { this.brand.call(); }}//抽象子类public class ButtonPhone extends Phone{    public ButtonPhone(Brand brand) {        super(brand);    }    public void open() {        super.open();        System.out.println("按键手机");    }    public void close() {        super.close();        System.out.println("按键手机");    }    public void call() {        super.call();        System.out.println("按键手机");    }}public class SlidePhone extends Phone{    public SlidePhone(Brand brand) {        super(brand);    }    public void open() {        super.open();        System.out.println("翻盖手机");    }    public void close() {        super.close();        System.out.println("翻盖手机");    }    public void call() {        super.call();        System.out.println("翻盖手机");    }}public class SmartPhone  extends Phone{    public SmartPhone(Brand brand) {        super(brand);    }    public void open() {        super.open();        System.out.println("智能手机");    }    public void close() {        super.close();        System.out.println("智能手机");    }    public void call() {        super.call();        System.out.println("智能手机");    }}
    //客户端调用public class Client {    public static void main(String[] args) {        Phone phone1 = new ButtonPhone(new NOKIA());        phone1.open();        phone1.call();        phone1.close();        System.out.println("=======================");        Phone phone2 = new SlidePhone(new Newsmy());        phone2.open();        phone2.call();        phone2.close();        System.out.println("=======================");        Phone phone3 = new SmartPhone(new Huawei());        phone3.open();        phone3.call();        phone3.close();    }}

    java中的桥接模式是什么

    总结

    • 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。

    • 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。

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

    • 常见的应用场景: -JDBC驱动程序

    -银行转账系统

    转账分类: 网上转账,柜台转账,AMT转账

    转账用户类型:普通用户,银卡用户,金卡用户…

     -消息管理

    消息类型:即时消息,延时消息

    消息分类:手机短信,邮件消息,QQ消息…

    到此,相信大家对“java中的桥接模式是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    java中的桥接模式是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    java中的桥接模式是什么

    本篇内容主要讲解“java中的桥接模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的桥接模式是什么”吧!目录引例桥接模式实战示例代码:总结引例需求:对不同手机类型的不同品牌(比
    2023-06-20

    PHP中的桥接模式是什么

    这篇文章主要讲解了“PHP中的桥接模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的桥接模式是什么”吧!桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟
    2023-06-20

    什么是php桥接模式

    本篇内容主要讲解“什么是php桥接模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是php桥接模式”吧!说明1、将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结
    2023-06-20

    php桥接模式的作用是什么

    这篇文章主要讲解了“php桥接模式的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php桥接模式的作用是什么”吧!作用说明1、桥接模式分离抽象接口及其实现部分,实现解耦,比继承更好
    2023-06-20

    docker桥接模式的作用是什么

    Docker桥接模式(Bridge Mode)是Docker的一种网络模式,它允许容器通过一个虚拟的网络桥接器连接到宿主机的网络接口上。在这种模式下,Docker会为每个容器创建一个虚拟网卡,并将这些容器连接到同一个网桥上。桥接模式的作用
    2023-10-22

    C++设计模式中的桥模式是什么

    这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是
    2023-06-29

    Java桥接模式怎么使用

    这篇文章主要介绍“Java桥接模式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java桥接模式怎么使用”文章能帮助大家解决问题。其实在现实生活中,有很多类可以有两个或多个维度的变化,如图形
    2023-06-30

    Java怎么实现桥接模式

    本文小编为大家详细介绍“Java怎么实现桥接模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现桥接模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。桥接模式(Bridge Pattern)是用于
    2023-06-27

    Java设计模式的桥接模式怎么实现

    这篇文章主要讲解了“Java设计模式的桥接模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的桥接模式怎么实现”吧!什么是桥接模式桥接(Bridge)模式的定义如下:
    2023-06-30

    Java设计模式之桥接模式怎么实现

    这篇文章主要介绍“Java设计模式之桥接模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式之桥接模式怎么实现”文章能帮助大家解决问题。一、什么是桥接模式:桥接,顾名思义,就是
    2023-07-02

    如何理解Java设计模式的桥接模式

    这篇文章主要讲解了“如何理解Java设计模式的桥接模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Java设计模式的桥接模式”吧!一、什么是桥接模式桥接模式(Bridge Patt
    2023-06-25

    Java设计模式的桥接模式如何实现

    本文小编为大家详细介绍“Java设计模式的桥接模式如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java设计模式的桥接模式如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是桥接模式桥接(Bri
    2023-07-06

    PHP桥接模式的优点与实现方法是什么

    这篇文章主要介绍“PHP桥接模式的优点与实现方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP桥接模式的优点与实现方法是什么”文章能帮助大家解决问题。桥接模式Bridge Pattern
    2023-07-05

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录