11、【桥接模式】让将抽象和实现分离,使得它们可以独立地变化

你好,我是程序员雪球。

今天我们来聊聊 23 种设计模式中,一种常见的结构型模式,桥接模式。聊聊它的设计思想、应用场景,以及如何使用。

一、设计思想

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。这种模式涉及到两个独立的类层次结构:抽象类层次结构和实现类层次结构。抽象类层次结构定义了抽象接口和抽象类,而实现类层次结构则提供了具体的实现。

在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。这种关联允许抽象类在不改变自身的情况下,通过切换不同的实现类来适应不同的需求。这使得抽象类和实现类可以独立地进行扩展和修改,提高了代码的灵活性和可维护性。

二、应用场景

桥接模式的应用场景包括以下几个方面:

  1. 平台无关性:当需要创建一个能够在多个平台上运行的软件系统时,可以使用桥接模式将平台相关的实现与平台无关的抽象部分分离。这样,系统可以根据不同的平台选择相应的实现类,从而实现平台无关性。

  2. 多态性:桥接模式允许在运行时动态选择不同的实现类,从而实现多态性。这使得系统可以根据不同的需求选择不同的实现方式,提高了代码的灵活性和扩展性。

  3. 可扩展性:桥接模式允许在不修改抽象类的情况下添加新的实现类。这使得系统可以轻松地扩展新的功能,而不会影响现有的代码。

  4. 可复用性:桥接模式将抽象部分和实现部分分离,使得抽象类可以在不同的系统中复用,而实现类可以根据具体需求进行定制。这提高了代码的可复用性和可维护性。

三、如何使用

下面是一个使用 Java 实现桥接模式的示例代码:

public class BridgePatternExample {

public static void main(String\[\] args) {

// 创建抽象类

AbstractShape abstractShape = new Circle();

// 创建实现类

AbstractImplementation abstractImplementation = new RedImplementation();

// 将抽象类和实现类关联起来

abstractShape.setImplementation(abstractImplementation);

// 调用抽象类的方法,实际执行的是实现类的方法

abstractShape.draw();

}

}

// 抽象类

abstract class AbstractShape {

protected AbstractImplementation implementation;

public AbstractShape(AbstractImplementation implementation) {

this.implementation = implementation;

}

public void setImplementation(AbstractImplementation implementation) {

this.implementation = implementation;

}

public abstract void draw();

}

// 具体实现类

class Circle extends AbstractShape {

public Circle(AbstractImplementation implementation) {

super(implementation);

}

@Override

public void draw() {

System.out.println("Circle: drawing with color " + implementation.getColor());

}

}

// 具体实现类

class RedImplementation extends AbstractImplementation {

@Override

public String getColor() {

return "red";

}

}

// 具体实现类

class BlueImplementation extends AbstractImplementation {

@Override

public String getColor() {

return "blue";

}

}

// 抽象接口

interface AbstractImplementation {

String getColor();

}

在这个示例中,我们定义了一个抽象类 AbstractShape ,它有一个抽象方法 draw() 。我们还定义了一个抽象接口 AbstractImplementation ,它有一个抽象方法 getColor() 。具体的实现类 Circle 和 RedImplementation 分别实现了 AbstractShape 和 AbstractImplementation 接口。

在 main() 方法中,我们创建了一个 Circle 对象,并将其与 RedImplementation 对象关联起来。然后,我们调用 draw() 方法,实际执行的是 RedImplementation 对象的 getColor() 方法,从而实现了桥接模式的效果。

通过桥接模式,我们将抽象部分和实现部分分离,使得它们可以独立地变化。这样,我们可以根据不同的需求选择不同的实现类,而不会影响抽象类的代码。同时,抽象类也可以在不同的系统中复用,提高了代码的可复用性和可维护性。

总结:

以上已经为你讲解了桥接模式的设计思想、应用场景,以及如何使用,接下来我带你一起总结。

一、设计思想

将抽象部分与实现部分分离,使它们可以独立地变化。

二、应用场景

  1. 多态性;

  2. 可扩展性;

  3. 可复用性;

三、如何使用

在桥接模式中,抽象类层次结构中的抽象类通过引用或组合的方式与实现类层次结构中的实现类进行关联。这种关联允许抽象类在不改变自身的情况下,通过切换不同的实现类来适应不同的需求。

讨论环节:

为了方便你理解和巩固今天的内容,我给你留下两个讨论题,请在评论区与我一起讨论吧。

  1. 桥接模式的核心设计思想是什么?

  2. 请说说你用过桥接模式的场景?

如果觉得有收获,请双击支持,后期我会持续更新更多相关知识。

相关推荐
St_rive4 小时前
Page Object设计模式
java·开发语言·设计模式
烬羽17 小时前
NestJS 依赖注入:Controller 里那个没有 new 的 service,到底从哪来的?
设计模式·typescript·nestjs
用户938515635071 天前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
烬羽1 天前
从 nest new 到 Hello World:一个最小 NestJS 项目,讲透工厂 + 装饰器 + 模块化
设计模式·node.js·nestjs
艺艺生辉2 天前
从if-else到策略模式
后端·设计模式
小林ixn2 天前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-17-装饰器模式(源码剖析篇)
java·spring·设计模式·装饰器模式·源码分析·io流
workflower3 天前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
winfreedoms3 天前
VMware 桥接模式无法联网:从 DHCPDISCOVER 到静态 IP 的完整排障实战
网络协议·tcp/ip·ubuntu·桥接模式·vmware·嵌入式学习
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-16-装饰器模式(业务实战篇)
java·设计模式·装饰器模式·功能扩展·动态增强