JAVA设计模式——(三)桥接模式

JAVA设计模式——(三)桥接模式(Bridge Pattern)

  • 介绍
  • 理解
  • 实现
    • 武器抽象类
    • 武器实现类
    • 涂装颜色的行为接口
    • 具体颜色的行为实现
    • 让行为影响武器
      • 修改武器抽象类
      • 修改实现类
    • 测试
  • 适用性

介绍

将抽象和实现解耦,使两者可以独立的变化。

理解

在这里需要理解的是如何让抽象和实现进行解耦。再具体编码代码时,抽象类一般用以定义一些对象的公共基类,公共基类包含一些共同属性或者一些通用实现方法,或者一些子类待实现的方法;接口则用于规范实现类的行为方法。

对于一个武器(实现类),制作一把武器需要模具(抽象类),假如我们需要拓展武器,让武器可以组装其他的组件,比如弹夹、枪管,那我们是否需要重新打造一个模具(抽象类),那这样做岂不是每次的改动都需要更改模具,让工作变得繁重。所以,有没有一种办法直接对实现类修改,有的。

直接修改实现类,我们可以直接更换枪管、更换弹夹等行为,即对实现类的直接修改(工作台一样)。这样就直接避免修改抽象类,转而通过工作台修改(即定义其他的行为)。

实现

武器抽象类

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public abstract class AbstractWeapon {public abstract void createWeapon();}

武器实现类

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:01* @Contact 643947568@qq.com*/
public class Weapon extends AbstractWeapon{@Overridepublic void createWeapon() {System.out.println("生产具有八倍镜的武器");}
}

涂装颜色的行为接口

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:07* @Contact 643947568@qq.com*/
public interface Color {public void getColor(); //绘制枪的颜色
}

具体颜色的行为实现

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:11* @Contact 643947568@qq.com*/
public class Green implements Color {@Overridepublic void getColor() {return "绿色";}
}

让行为影响武器

如何让行为影响武器,是值得思考的问题。为了让武器的颜色得到改变,一种方法武器和颜色传送给Color类涂装,另一种是将定义的颜色传给武器进行涂装。

当然,选择第二种是更好的。由于颜色是预先定义的,而不是根据颜色需求来定制颜色。另外,武器的组装线在武器类里面,难道你会把武器送给颜料厂进行涂装吗?肯定不会吧。

修改武器抽象类

让武器类具有颜色属性

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public abstract class AbstractWeapon {Color color;public AbstractWeapon(Color color) {this.color = color;}public abstract void createWeapon();}

修改实现类

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:01* @Contact 643947568@qq.com*/
public class Weapon extends AbstractWeapon {public Weapon(Color color) {super(color);}@Overridepublic void createWeapon() {System.out.println("生产具有八倍镜的武器");System.out.println("涂装颜色" + color.getColor());}
}

测试

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public class Main {public static void main(String[] args) {Color green = new Green();  //定义颜色Weapon weapon = new Weapon(green);  //将颜色传给武器weapon.createWeapon();}
}

适用性

进过上面的例子,因该很好理解桥接模式的运用。

桥接模式更偏向运用组合的方式,将实现细节从本体中抽离出来,从而将颜色的实现细节从武器的生产线抽离,而无需
关心其中部分的实现,只需要得到这部分的属性即可。

如果我们直接采用实现的方式,让武器具有颜色的行为,就好比把武器组装线中,塞一个颜色的加工厂一样,臃肿,也没有解耦合。此外,直接实现Color接口的方式,会使得每次颜色类的变动,均会影响实现的子类,均需要重写接口的抽象方法。

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

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

相关文章

k8s 证书相关问题

1.重新生成新证书 kubeadm init phase certs apiserver-etcd-client --config ~/kubeadm.yaml这个命令表示生成 kube-apiserver 连接 etcd 使用的证书,生成后如下 -rw------- 1 root root 1.7K Apr 23 16:35 apiserver-etcd-client.key -rw-r--r-- 1 root root 1.2K Apr 23 …

比较:AWS VPC peering与 AWS Transit Gateway

简述: VPC 对等连接和 Transit Gateway 用于连接多个 VPC。VPC 对等连接提供全网状架构,而 Transit Gateway 提供中心辐射型架构。Transit Gateway 提供大规模 VPC 连接,并简化了 VPC 间通信管理,相比 VPC 对等连接,支持大量 VPC 的 VPC 间通信管理。 VPC 对等连接 AWS V…

制造企业PLM深度应用:2025年基于PDCA循环的7项持续改进指标

制造企业的产品生命周期管理(PLM)在数字化转型的浪潮中扮演着至关重要的角色。PLM深度应用不仅能够提升产品研发效率、保证产品质量,还能增强企业在市场中的竞争力。随着2025年智能制造目标的推进,基于PDCA循环的持续改进对于PLM的…

极狐GitLab 的压缩和合并是什么?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 压缩和合并 (BASIC ALL) 在你处理一个特性分支时,通常会创建一些小的、独立的提交。这些小提交帮助描述构建特性…

解耦旧系统的利器:Java 中的适配器模式(Adapter Pattern)实战解析

在现代软件开发中,我们经常需要与旧系统、第三方库或不一致接口打交道。这时候,如果能优雅地整合这些不兼容组件,又不破坏原有结构,就需要一位“翻译官” —— 适配器模式。本文将通过 Java 实例,详细讲解适配器模式的…

03-谷粒商城笔记

一个插件的install和生命周期的报错是不一样的 Maven找不到ojdbc6和sqljdbc4依赖包 这时候我找到了jar包,然后我就先找到一个jar安装到了本地仓库。 在终端上进行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …

黑马点评redis改 part 5

达人探店 发布探店笔记 那第一张表block表它里边的结构呢是这个 首先呢第一个字段是i d,就是主键,第二个呢是shop id,就是商户你发的这个比例啊,它是跟哪个商户有关系的。第三个呢用户id就是谁发的这篇笔记,第四个呢标…

【PCB工艺】运放电路中的负反馈机制

通过运算方法器电路设计详细解释负反馈机制(Negative Feedback) 负反馈 是控制系统、电子电路、神经系统等多个领域中非常核心的概念。特别在运算放大器(Op-Amp)电路中,负反馈是实现精确控制和高稳定性的关键机制。 …

声纹振动传感器在电力监测领域的应用

声纹振动传感器在电力监测领域有多种应用,主要包括以下几个方面: 变压器监测 故障诊断:变压器在运行过程中会产生特定的声纹和振动信号,当变压器内部出现故障,如绕组短路、铁芯松动、局部放电等,其声纹和振…

7、sentinel

控制台访问地址&#xff1a;http://localhost:8080/ 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>配置文件 spring:cloud:sentinel:transpo…

线程封装

目录 makefile Thread.hpp main.cc 以面向对象的方式造轮子 #ifndef _THREAD_HPP__ // 如果没有定义过 _THREAD_HPP__ #define _THREAD_HPP__ // 则定义 _THREAD_HPP__// 这里是头文件的实际内容&#xff08;类、函数声明等&#xff09;#endif // 结束条件…

【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性

在Maven项目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置&#xff0c;并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…

极狐GitLab 的合并请求部件能干什么?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并请求部件 (BASIC ALL) 合并请求的 概述 页面显示了来自服务的状态更新&#xff0c;这些服务会对您的合并请求执行操作。…

26、C# 中是否可以继承String类?为什么?

在 C# 中&#xff0c;不能直接继承 String 类&#xff08;System.String&#xff09;。这是由于以下几个原因&#xff1a; 1、String 类是 sealed 的 String 类在 .NET 中被标记为 sealed&#xff0c;这意味着它是一个密封类&#xff0c;不能被继承。 sealed 关键字的作用是防…

deeplab语义分割训练自定数据集

链接&#xff1a;https://pan.baidu.com/s/1KkkM1rLfyiMPtYLycpnxmg?pwdj2rd 提取码&#xff1a;j2rd --来自百度网盘超级会员V2的分享 采用数据集&#xff1a; https://aistudio.baidu.com/datasetdetail/130647 采用代码&#xff1a; https://github.com/jfzhang95/pyt…

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…

12、高阶组件:魔法增幅器——React 19 HOC模式

一、魔法增幅器的本质 "高阶组件是魔法师用咒语叠加的炼金术&#xff0c;"霍格沃茨魔咒研究院院长凝视着发光的增幅器&#xff0c;"通过函数式能量场的嵌套&#xff0c;让基础组件获得预言家日报式的逻辑继承&#xff01;" ——以神秘事务司的「维度叠加理…

Qt creator 16.0.1 语言家失效解决方法

一、在菜单“工具-->外部”里面没有语言家、更新翻译、发布翻译工具。 二、解决方法 手工添加 1、添加目录 2、添加工具 更新翻译 (lupdate) %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate %{CurrentDocument:Project:FilePath} %{CurrentDocument:Project:Path}…

Apple AirTag定位原理

AirTag 是苹果公司推出的一款用于追踪物品的设备&#xff0c;触及到我的知识盲区。所以特地记录一下技术原理。其工作所用的技术原理主要涉及以下几个方面&#xff1a; 蓝牙技术&#xff1a;AirTag 使用蓝牙低功耗技术&#xff08;BLE&#xff09;与用户的 iPhone 或其他苹果设…

计算机网络 实验五 RIP的配置与应用

摘要 本实验基于华为eNSP平台构建多路由器网络拓扑&#xff0c;旨在通过实战掌握路由器配置、RIP协议部署及网络故障排查等核心技能。实验分为拓扑设计、设备初始化、协议配置、连通性测试四个阶段&#xff0c;重点研究RIPv2版本特性及自动汇总抑制机制。 在配置过程中&#…