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

桥接模式简介

在Java中,桥接模式(Bridge Pattern)的核心思想是将抽象部分与其实现部分分离,使其可以独立变化。以下是桥接模式的一个简单示例,我们将创建一个图形渲染系统,该系统允许用户选择不同的形状(抽象部分)和不同的颜色策略(实现部分)。

首先,我们定义抽象部分——图形接口及其两个实现:

// 抽象部分 - 图形接口
public interface Shape {
    void draw(ColorImplementor color);
}

// 抽象部分的实现 - 具体图形
public class Circle implements Shape {
    @Override
    public void draw(ColorImplementor color) {
        System.out.println("Drawing a circle with " + color.getColor());
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw(ColorImplementor color) {
        System.out.println("Drawing a rectangle with " + color.getColor());
    }
}

// 实现部分的抽象接口 - 颜色策略
public interface ColorImplementor {
    String getColor();
}

// 实现部分的具体类 - 不同的颜色策略
public class RedColor implements ColorImplementor {
    @Override
    public String getColor() {
        return "Red";
    }
}

public class BlueColor implements ColorImplementor {
    @Override
    public String getColor() {
        return "Blue";
    }
}

然后,我们可以创建一个桥接使用的客户端代码:

public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle();
        Shape blueRectangle = new Rectangle();

        ColorImplementor red = new RedColor();
        ColorImplementor blue = new BlueColor();

        // 组合图形与颜色策略
        redCircle.draw(red);
        blueRectangle.draw(blue);

        // 输出结果类似于:
        // Drawing a circle with Red
        // Drawing a rectangle with Blue
    }
}

在这个例子中,Shape是抽象部分,它定义了所有图形共有的行为(绘制),但是不关心如何绘制颜色。CircleRectangle是抽象部分的具体实现,它们都依赖于ColorImplementor接口来决定颜色策略。

ColorImplementor则是实现部分的抽象接口,RedColorBlueColor是它的具体实现。这样,我们就可以独立地修改图形种类或颜色策略,而不影响彼此的实现细节。这就是桥接模式的应用。

相关文章:

  • CentOS7 防火墙(firewalld)常规操作
  • 【自然语言处理】统计中文分词技术(一):1、分词与频度统计
  • 语言模型transformers调用部分 (To be continue...
  • 数据库中冗余字段
  • Java 自定义线程池实现
  • [运维] 可视化爬虫易采集-EasySpider(笔记)
  • CSS案例-2.简单版侧边栏练习
  • 通过dbeaver链接dm8数据库
  • redis优化token校验主动失效
  • 基于UDP的网络聊天室
  • rtt的io设备框架面向对象学习-内部调用流程
  • Linux相关命令(2)
  • jackson:JSON字符串(String)类型的成员序列化和反序列化
  • 【运维笔记】VM 记录一次centos虚拟机和宿主机之间ping不通的问题
  • 基于 HBase Phoenix 构建实时数仓(5)—— 用 Kafka Connect 做实时数据同步
  • 【Redis知识点总结】(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法
  • ReaLTaiizor开源.NET winform控件库学习使用
  • Redis 不再“开源”,对中国的影响及应对方案
  • docker仓库登录及配置insecure-registries的方法
  • python基础——数据容器总结、通用方法和相互转换
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 山东14家城商行中,仅剩枣庄银行年营业收入不足10亿
  • 欧洲史上最严重停电事故敲响警钟:能源转型如何保证电网稳定?
  • 2024年上市公司合计实现营业收入71.98万亿元
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 上海如何为街镇营商环境赋能?送政策、配资源、解难题、强活力