首页 > 编程语言 >Java设计模式 —— 【结构型模式】桥接模式详解

Java设计模式 —— 【结构型模式】桥接模式详解

时间:2024-12-19 18:59:02浏览次数:11  
标签:角色 show 桥接 模式 color 抽象化 设计模式 public

前言

现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。

首先我们看看用继承来实现:
在这里插入图片描述
我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。

试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。
在这里插入图片描述
定义:

将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。


结构

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

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

代码演示

我们继续以上述案例做以代码演示:

UML类图:
在这里插入图片描述

图形类【抽象化角色、扩展抽象化角色】:

//抽象化角色(包含对实现化角色的引用)
public abstract class Shape {
    protected String name;
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    public void show(){
        System.out.println(color.show() + name);
    }
}

//扩展抽象化角色
public class Square extends Shape {
    public Square(Color color) {
        super(color);
        name = "正方形";
    }
}

public class Round extends Shape {
    public Round(Color color) {
        super(color);
        name = "圆形";
    }
}

颜色类【实现化角色 、具体实现化角色 】:

public interface Color {
    String show();
}

public class Green implements Color {
    @Override
    public String show() {
        return "绿色";
    }
}

public class Red implements Color {
    @Override
    public String show() {
        return "红色";
    }
}

测试:

public class Client {
    public static void main(String[] args) {
        Shape roundGreen = new Round(new Green());
        Shape roundRed = new Round(new Red());
        Shape squareGreen = new Square(new Green());
        Shape squareRed = new Square(new Red());
        roundGreen.show();
        roundRed.show();
        squareGreen.show();
        squareRed.show();
    }
}

在这里插入图片描述


优缺点

优点:

  • 实现抽象和实现的分离;
  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统;
  • 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本;
  • 实现细节对客户透明。

缺点:

  • 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程;
  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景。

使用场景

  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时;
  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时;
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

标签:角色,show,桥接,模式,color,抽象化,设计模式,public
From: https://blog.csdn.net/m0_74620530/article/details/144570258

相关文章

  • 如何实现工厂模式?
    什么是工厂模式?工厂模式使一种创建对象的设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。通过工厂模式,可以根据不同条件创建不同类型的对象,而不需要在客户端代码中显式地指定具体的对象类型。在c++中如何实现工厂模式?可以通过定义一个工厂类,该类包含一个或......
  • 【基于Windows安装配置nacos 2.4.3、开机自启动、启动默认单机模式、单机模式匹配MySQ
    【基于Windows安装配置nacos2.4.3、开机自启动、启动默认单机模式、单机模式匹配MySQL】前言一、下载安装Windows版nacos2.4.3二、配置nacos完成自启单机模式三、设置Windows开机自启四、匹配MySQL数据库总结提示:可以在官网选择下载符合自己要求的版本前言......
  • Win11性能优化:如何调整至最佳性能模式
    Win11性能优化:如何调整至最佳性能模式Windows11作为微软最新的操作系统,为用户带来了诸多新特性和改进。其中,性能模式的调整对于追求极致使用体验的用户来说尤为重要。通过调整至最佳性能模式,您可以显著提升计算机的响应速度和运行效率。然而,一些用户在升级到Windows11后,......
  • 拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
    首发:运维有术今天分享的主题是:不使用Helm、Operator,如何在K8s集群上手工部署一个开启SASL认证的KRaft模式的Kafka集群?本文,我将为您提供一份全面的实战指南,逐步引导您完成以下关键任务:配置KafkaSecret:管理用户密码和集群ID配置KafkaService:使用NodePort对外发......
  • 中间件管道设计模式实现
    publicinterfaceIMiddleware{voidInvoke(PipelineContextcontext,Actionnext);}publicclassPipelineContext{publicstringData{get;set;}}publicclassPipelineEx......
  • workman服务端开发模式-应用开发-总架构逻辑说明
    一、后台管理端(操作页面端)    管理员用浏览器打开页面管理端后,页面管理端会自动检测,如果本地cookie不存在的情况下,跳转到登录页面,如果本地cookie存在的情况下,跳转到首页。登录的情况下,就不说,后面在业务架构里面会说明的。    在登录页面输入邮箱账号、密......
  • 设计模式--工厂方法模式【创建型模式】
    设计模式的分类我们都知道有23种设计模式,这23种设计模式可分为如下三类:创建型模式(5种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式(11种):策略......
  • 【路由交换】华为ENSP配置网口桥接
    ENSP桥接物理网口,需要创建Cloud云对象,并在云对象中完成接口绑定配置绑定物理网口绑定UDP端口配置端口映射模拟器和cloud对象连接网络连接测试......
  • HP服务器开启性能模式
    ENERGYPERFBIASCFG模式指的是通过特定配置(通常是BIOS或操作系统中的设置)来控制处理器的能源性能偏置(EnergyPerformanceBias,EPB)。EPB是一种机制,允许用户或系统管理员在性能和功耗之间进行权衡。不同的设置可以影响系统的响应速度、能效等。ENERGYPERFBIASCFG模......
  • 设计模式——建造者模式
    设计模式——建造者模式目录设计模式——建造者模式介绍实现结构及工作流程经典实现示例优缺点使用场景扩展实现示例总结介绍建造者模式(BuilderPattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程分解成多个简单的步骤,从而使得不同的构建过程可以生成......