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

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接口的方式,会使得每次颜色类的变动,均会影响实现的子类,均需要重写接口的抽象方法。

相关文章:

  • 桥接模式:分离抽象与实现的独立进化
  • C语言中的递归1.0
  • 时序数据库IoTDB自研的Timer模型介绍
  • 基于自主大型语言模型代理的AIoT智能家居
  • 网络原理 - 5(TCP - 2 - 三次握手与四次挥手)
  • 【笔记】CentOS7部署K8S集群
  • 经验分享-上传ios的ipa文件
  • 2.2 主流大模型架构:GPT、DeepSeek、GLM、Claude、QwQ、Qwen2.5-Max等模型的比较与应用场景
  • sizeof和strlen的区别
  • 【Java学习笔记】循环结构
  • 翻倍缠论系统+拐点多空雷达,组合指标的使用操盘技术
  • J1800主板刷黑群晖
  • 基于VTK的光线投影法体绘制
  • SSE(Server-Sent Events)技术详解:轻量级实时通信的全能方案
  • Android将启动画面实现迁移到 Android 12 及更高版本
  • gbase8s存储学习一 rootdbs存储结构以及寻址分析
  • 【Java面试笔记:基础】10.如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?
  • Android 中解决 RecyclerView 和子控件之间的滑动冲突问题
  • 文档构建:Sphinx全面使用指南 — 进阶篇
  • Android TV 输入框架(TIF)深度解析与实践指南
  • 宜昌为何能有一批世界级农业:繁育虫草养殖鲟鱼,柑橘魔芋深耕大健康
  • 中国牵头制定,在线旅游机构和展览与活动领域ISO国际标准发布
  • 解放军报社论:谱写新时代双拥工作崭新篇章
  • 2025年一季度上海市国民经济运行情况
  • 浦江观察|3.6亿元消费券,为上海餐饮业带来了什么?
  • IMF将今年全球经济增长预期由3.3%下调至2.8%