设计模式(六)结构型模式---桥接模式

文章目录

  • 桥接模式简介
  • 结构
  • 优点
  • UML图
  • 具体实现
      • UML图
      • 代码实现

桥接模式简介

  • 桥接模式是一种将抽象实现分离,使它们独立变化。然后利用组合关系来代替继承关系,大大的降低了抽象和实现的耦合度的设计模式。
  • 实际使用: JDBC源码分析,定义了Driver接口,然后各个数据库厂商去实现Driver接口,

结构

  • 1.抽象化角色(Abstraction):定义抽象类,并包含一个对实现化的引用。
  • 2.扩展抽象化角色(Refined Abstraction):抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色的业务方法
  • 3.实现化角色(Implementor):定义实现角色的接口,供扩展抽象化角色调用。
  • 4.具体实现化角色(Concrete Implementor):给出实现化接口的具体实现。

优点

  • 1.实现了抽象和实现部分的分离,提高了系统的灵活性,有助于系统进行分层设计。
  • 2.桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。

UML图

在这里插入图片描述

具体实现

UML图

在这里插入图片描述

代码实现

  • 手机类(抽象化角色)
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: 手机类 - 抽象化角色* @date 2024/5/25 12:03*/
public abstract class Phone {// 组合 品牌 ---- 这就是桥接模式的方式,利用了组合关系private Brand brand;// 构造器public Phone(Brand brand) {this.brand = brand;}public void call() {brand.call();}
}
  • 扩展抽象化角色
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: FoldedPhone -- 扩展抽象化角色* @date 2024/5/25 12:12*/
public class FoldedPhone extends Phone{public FoldedPhone(Brand brand) {super(brand);}public void call() {super.call();System.out.println("FoldedPhone");}
}
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: UpRightPhone -- 扩展抽象化角色* @date 2024/5/25 12:12*/
public class UpRightPhone extends Phone{public UpRightPhone(Brand brand) {super(brand);}public void call() {super.call();System.out.println("UpRightPhone");}
}
  • 实现化角色
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: 品牌接口 - 实现化角色 接口* @date 2024/5/25 12:04*/public interface Brand {public abstract void call();
}
  • 具体实现化角色
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: HuaWei Brand - 具体实现化角色* @date 2024/5/25 12:07*/
public class HuaWeiBrand implements Brand {@Overridepublic void call() {System.out.println("HuaWei call...");}
}
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: MI Brand - 具体实现化角色* @date 2024/5/25 12:05*/
public class MIBrand implements Brand{@Overridepublic void call() {System.out.println("MI call...");}
}
  • 测试客户端
package com.xxliao.pattern.structure.bridge.demo;/*** @author xxliao* @description: 测试客户端* @date 2024/5/25 12:13*/
public class Client {public static void main(String[] args) {Phone phone1 = new FoldedPhone(new MIBrand());phone1.call();System.out.println("=========================================================");Phone phone2 = new FoldedPhone(new HuaWeiBrand());phone2.call();System.out.println("=========================================================");Phone phone3 = new UpRightPhone(new MIBrand());phone3.call();System.out.println("=========================================================");Phone phone4 = new UpRightPhone(new HuaWeiBrand());phone4.call();System.out.println("=========================================================");}
}
  • 测试结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xcode下载安装

1.Xcode可用版本判断: 2.Xcode下载安装: 方案1:AppStore 下载更新 若方案1失败则 方案2:指定版本Xcode包下载解压安装 苹果下载 3.Xcode命令行工具插件安装 xcode-select --install 备注: xcode_x.x.x.xip(压缩包存在时效性(使用前24h/…

Mac专用投屏工具:AirServer 7 for Mac 激活版下载

AirServer 7 是一款在 Windows 和 macOS 平台上运行的强大的屏幕镜像和屏幕录制软件。它能够将 iOS 设备、Mac 以及其他 AirPlay、Google Cast 和 Miracast 兼容设备的屏幕镜像到电脑上,并支持高质量的录制功能。总的来说,AirServer 7 是一款功能全面的屏…

Mybatis编写SQL

文章目录 一、用注解编写1.1 增普通增加获取自增ID 1.2 删和改1.3 查单表查询多表查询 二、用xml编写2.1 使用xml的流程2.2 增普通增加获取自增ID 2.3 删 和 改2.4 查 三、#{} 和 ${}3.1 #{} 、${}3.1 预编译 SQL 、即时编译SQL 两种写法是可以同时存在的 一、用注解编写 1.1 …

mediasoup基础概览

提示:本文为之前mediasoup基础介绍的优化 mediasoup基础概览 架构:2.特性:优点缺点 3.mediasoup常见类介绍js部分c 4.mediasoup类图5.业务类图 Mediasoup 是一个构建在现代 Web 技术之上的实时通信(RTC)解决方案&#…

快速排序详讲(两种方法)

目录 原理 实现方式 正常实现 理由 先从右到左,在从左到右 先从左到右,先从右到左 挖坑法 效率 优化 测试 代码 原理 快速排序是将最左侧的数字当作关键数字,将关键数字放在对应位置,且关键数字左侧均大于它&#xff…

模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage)

模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage) 大信号分析 对M1 V x ≥ V i n − V T H 1 V x V B − V G S 2 V B ≥ V i n − V T H 1 V G S 2 V_{x}\geq V_{in}-V_{TH1}\quad V_{x}V_{B}-V_{GS2}\\V_{B}\geq V_{in}-V_{TH1}V_{GS2} Vx…

每日一题《leetcode-- LCR 025.两数相加||》

https://leetcode.cn/problems/lMSNwu/ 分别把给定的两个链表翻转,然后从头开始相加。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ //反转链表 struct ListNode* reverselist(struct ListNode*h…

进程——linux

目录 冯诺依曼体系结构(计算机组成原理与体系结构) 关于冯诺依曼,必须强调几点: 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 一、进程 基本概念…

盒模型及其应用(溢出、外边距塌陷)

一、盒模型 盒模型详解-CSDN博客 CSS学习笔记3:CSS三大特性、盒子模型-CSDN博客 1.盒模型组成 (1)padding padding和border都会撑大盒子,margin不会. 如果没有指定盒子的width/height,那么padding不会撑大盒子。 &am…

详解动态库和静态库

文章目录 前言静态库静态库制作静态库的生成发布静态库使用静态库安装静态库卸载静态库 动态库动态库的制作动态库的生成动态库的发布使用动态库 动态库VS静态库 前言 在C、C中我们使用过标准库,比如在使用strerror、vector、string等时,都只是调用了这…

【对算法期中卷子的解析和反思】

一、程序阅读并回答问题&#xff08;共30分&#xff09; #include<cstdio>#include<cstring>#include<iostream>using namespace std;char chess[10][10];int sign[10];int n, k, ans;void dfs(int x, int k) { if (k 0){ans;return; } if (xk-1 >…

智能学工系统实现学生管理

人才培养是高校的榜首要务&#xff0c;高校在抓好学生教育作业的一起&#xff0c;更多的是要加强对学生的办理作业。作为在校大学生健康成长的指导者和引路人&#xff0c;面临很多的学生办理作业内容杂乱&#xff0c;事无巨细&#xff0c;但在传统的办理方式下&#xff0c;尽管…

Java集合:数据存储与操作的瑞士军刀

Java集合概述 集合是用来存储多个元素的容器。文章从四个方面来概述下集合&#xff0c;让读者对集合有一个大致的了解。 一、 多样化的容器 Java 集合大致包含 2 大体系 Collection体系 List&#xff1a;存储有序、重复的元素 Set&#xff1a;存储无序、不可重复的元素…

摸鱼大数据——Hive函数7-9

7、日期时间函数 Hive函数链接&#xff1a;LanguageManual UDF - Apache Hive - Apache Software Foundation SimpleDateFormat (Java Platform SE 8 ) current_timestamp: 获取时间原点到现在的秒/毫秒,底层自动转换方便查看的日期格式 常用 to_date: 字符串格式时间…

【Self-Attention——Transform—Bert】相关的基础理论

1.Self-Attention模型图解 传统的循环神经网络&#xff0c;如上左图1&#xff0c;并不能解决并行化的问题&#xff0c;右图就是一个self-Attention可以实现并行化&#xff0c;并且能解决对于所有信息的读取利用。 将self—Attention替换相应的GRU或者RNN&#xff0c;就能实现从…

单片机原理及应用复习

单片机原理及应用 第二章 在AT89S52单片机中&#xff0c;如果采用6MHz晶振&#xff0c;一个机器周期为 2us 。 时钟周期Tocs1focs 机器周期 Tcy12focs 指令周期&#xff1a;一条指令所用的时间&#xff0c;单字和双字节指令一般为单机器周期和双机器周期。 AT89S5…

Sentinel限流学习

Sentinel限流学习 初识Sentinel运行sentinel雪崩问题服务保护技术对比微服务整合Sentinel 限流规则簇点链路 流控模式-关联流控模式-链路流控模式有哪些&#xff1f; 流控效果流控效果-warm up流控效果-排队等待 热点参数限流隔离和降级Feign整合Sentinel线程隔离有两种方式实现…

【论文复现|智能算法改进】基于多策略麻雀搜索算法的机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.改进点 改进的无限折叠迭代混沌映射 无限折叠迭代映射(ICMIC) 常用于图像加密方向的研究, 基本思想是首先生成[0,1]之间的混沌序列, …

摸鱼大数据——Hive函数10-12

10、堆内存错误 报错&#xff1a; Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Java heap space 解决方案: 在node1上面操作即可 方式1: 找到/export/server/hive/conf/hive-env.sh,添…