文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

设计模式——桥接模式详解

2023-10-11 21:03

关注

🚀桥接模式(抽象与实现分离)

1.1⭐桥接模式的定义

维基百科:桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。

百度百科:桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。

1.2☘️桥接模式的结构

桥接(Bridge)模式包含以下主要角色:

1.3🚀桥接模式简单案例及代码演示

**举个🌰:**假设有一个歌手,他的名字叫磊磊。磊磊会用嘴唱歌,磊磊会边弹吉他边唱歌。但是磊磊是个十分好学的孩子不满足于现状,于是他报了个机构叫白马教育,并且成为了Good Singer班中的一员。在进行了长达两年半的学习之后,磊磊凭借着过人的天赋学会了边弹钢琴边唱歌。

如何实现???

a.传统思路:

定义一个演员类,将用嘴唱歌,用吉他唱歌,用钢琴唱歌写到这个类中。

缺点很明显,如果又来了一个人怎么办,如果又学会的一个乐器怎么办,显然不易扩展。

b.桥接模式思路:

在抽象类中

将需要桥接的接口拿到父类里

直接将接口属性丢到构造方法里,同时要在子类构造该方法

调用桥接属性开始“表演”

代码演示:

定义抽象演员类(Perfomer)

package com.qf.bridge;public abstract class Perfomer{    //桥接属性    protected IplayType playType;    //构造表演方法    public Perfomer(IplayType playType){        this.playType=playType;    }    //表演    abstract protected void perform();}

定义磊磊类,继承抽象演员类

package com.qf.bridge;public class Leilei extends Perfomer{    //构造方法传递需要的乐器表演方式    public Leilei(IplayType playType) {        super(playType);    }    @Override    protected void perform() {        playType.play("磊磊");    }}

设计乐器表演接口,包含一个play方法

package com.qf.bridge;//表演方式public interface IplayType{    void play(String name);}

定义吉他表演类遵从乐器表演接口

package com.qf.bridge;public class Guitar implements IplayType {    @Override    public void play(String name) {        System.out.println(name+"用吉他唱歌了");    }}

定义嘴巴类遵从乐器表演类

package com.qf.bridge;public class Mouth implements IplayType{    @Override    public void play(String name) {        System.out.println(name+"用嘴唱歌了");    }}

Test

package com.qf.bridge;public class Demo1 {    public static void main(String[] args) {        Perfomer mouth = new Leilei(new Mouth());        mouth.perform();        Perfomer guitar = new Leilei(new Guitar());        guitar.perform();    }}

结果展示:

1.4🚀桥接模式的UML图

稍作解释:

+表示public,-表示private,#表示protected

聚合关系可以用【带空心菱形的实线】来表示,菱形指向整体。(如:teacher是university的一个部分)

继承关系用【带空心三角箭头的实线】来表示,箭头从子类指向父类。

虚假的UML图:

真正的UML图:

1.5🌟桥接模式的应用场景

跨平台视频播放器,可以在不同操作系统平台(如Windows、Mac、Linux等)上播放多种格式的视频文件,常见的视频格式包括RMVB、AVI、WMV等

1.6☘️桥接模式的优缺点

优点:

  1. 分离抽象接口及其实现部分。使得抽象和实现可以沿着各自的维度来变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。

  2. 在很多情况下,桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。

    多继承是指一个类可以同时从多个父类继承属性和方法。这种继承方式可以让子类同时拥有多个父类的特征,但也可能带来一些问题,比如构造函数的执行顺序和类中同名变量冲突等

  3. 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。

缺点:

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

1.7🚀桥接模式与其他模式的区别

桥接模式与策略模式的区别

桥接模式中不仅Implementor具有变化 ,而且Abstraction也可以发生变化,而且两者的变化是完全独立的

策略模式仅仅通过Abstraction与 Implementor之间的关系联系起来。而在策略模式中,并不考虑Context的变化,只有算法的可替代性。

策略模式的目的是封装一系列的算法,使得这些算法可以相互替换;而桥接模式的目的是分离抽象和实现部分,使得它们可以独立的变化。

前面的路以后再来探索吧……………………….

来源地址:https://blog.csdn.net/qq_45944185/article/details/129484944

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯