当前位置: 首页 > news >正文

深度学习设计模式之桥接模式

文章目录

  • 前言
  • 一、介绍
  • 二、详细分析
    • 1.核心组成
    • 2.实现步骤
    • 3.代码示例
    • 4.优缺点
      • 优点
      • 缺点
    • 5.使用场景
  • 总结


前言

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


一、介绍

桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。通俗来讲是通过组合来桥接其它的行为/维度。

二、详细分析

1.核心组成

  • 抽象化角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。

    • 扩展抽象化角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。

    • 实现化角色 :定义实现化角色的接口,包含角色必须的行为和属性,并供扩展抽象化角色调用。

    • 具体实现化角色 :给出实现化角色接口的具体实现。
      在这里插入图片描述

2.实现步骤

  1. 先创建实现角色接口;
  2. 创建实现角色的具体实现类;
  3. 创建抽象角色,持有实现角色接口类;
  4. 创建抽象角色扩展类,继承抽象角色。

3.代码示例

实现角色类

/*** 实现角色类*/
public interface CatColour {/*** 获取颜色*/void getColour();
}

具体实现角色类

/*** 接口实现类*/
public class RedCatColour implements CatColour{@Overridepublic void getColour() {System.out.println("红色");}
}
public class SkyBlueCatColour implements CatColour{@Overridepublic void getColour() {System.out.println("天蓝色");}
}

抽象角色类

/*** 抽象类接口*/
public abstract class Cat {// 将接口作为一个属性来修饰 抽象类protected CatColour catColour;// set方法设置属性Capublic void setCatColour(CatColour catColour) {this.catColour = catColour;}/*** 行驶汽车*/abstract void run();}

抽象扩展实现类

/*** 抽象实现类*/
public class XiaomiSu7Cat extends Cat{public XiaomiSu7Cat(CatColour colour) {super.setCatColour(colour);}@Overridevoid run() {catColour.getColour();System.out.println("小米su7");}
}
public class BmwCat extends Cat{public BmwCat(CatColour catColour) {super.setCatColour(catColour);}@Overridevoid run() {catColour.getColour();System.out.println("宝马车");}
}

测试类

    public static void main(String[] args) {XiaomiSu7Cat xiaomiSu7Cat = new XiaomiSu7Cat(new SkyBlueCatColour());xiaomiSu7Cat.run();}

结果
在这里插入图片描述

4.优缺点

优点

  • 抽象和实现的分离。桥接模式使用"对象间的关联关系"解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。

  • 优秀的扩展能力。桥接模式提高了系统的扩展性,在两个变化维度中任意扩展一个维度都不需要修改原有系统,符合开闭原则。

缺点

  • 增加系统的理解与设计难度。由于关联关系建立在抽象层,要求开发者一开始就要对抽象层进行设计和编程。

5.使用场景

  • 系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性;

  • 不想使用继承导致类的个数急剧增加。


总结

以上就是今天的内容了,本文简单介绍了桥接设计模式的使用和优缺点,提供代码示例以供参考。

http://www.lryc.cn/news/353407.html

相关文章:

  • 设计模式 17 组合模式 Composite Pattern
  • 【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档
  • 串行低功耗芯片间媒体总线(SLIMbus)介绍
  • esp32-S3 使用自带的大模型,实现本地文字转语言tts
  • Redis事务(1)
  • 202206青少年软件编程(Python)等级考试试卷(四级)
  • 大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛
  • Leetcode 环形链表|| 快慢指针解法
  • 出书,是「盖你自己的房子」你知道吗?
  • 深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
  • 驾校管理系统-手把手调试搭建
  • 知能行——考研数学利器
  • pod 库发布脚本
  • Java 8 新特性:深入理解 Lambda 表达式的强大与应用
  • HTML5 Canvas图形绘制技术应用
  • JMETER工具:以录制手机app为例
  • PDF文件权限密码保护:如何去除及解决方法
  • 【电子信息(工程)】电子通信创新创业教育综合
  • 光伏无人机巡检的工作原理是什么?
  • 泛型中K T V E ? Object等分别代表的含义
  • 常用损失函数学习
  • 判断视频moov的位置
  • python安装依赖
  • 如何利用GitHubAction来发布自己的Python软件包
  • raspberry pi/orienge pi等arm架构硬件打包ros humble docker视觉及机器人开发镜像
  • springboot+mysql在线考试系统-计算机毕业设计源码82584
  • LangChain - 建立代理
  • 爬虫案例:有道翻译python逆向
  • 仅需一块 4GB 的 GPU ,就能运行开源大语言模型:Llama3 70B
  • 一战成电失败,二战上岸复旦!