java设计模式:03-02-桥接模式

桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种模式可以让一个类的两个变化维度独立扩展,而不会相互影响。

桥接模式的应用场景

  • 当一个类存在两个独立变化的维度,且这两个维度都需要独立扩展时:例如,图形系统中的形状和颜色可以独立变化。
  • 避免类的多层继承结构:通过组合的方式代替继承,以减少复杂的继承关系。
  • 需要在运行时刻切换实现时:例如,不同平台上的图形绘制实现。

桥接模式的实现方式

1. 传统实现方式

思想:通过将抽象部分(Abstraction)和实现部分(Implementor)分离,使得它们可以独立变化。

实现方式

java 复制代码
// 实现部分接口
interface Implementor {
    void operationImpl();
}

// 具体实现部分
class ConcreteImplementorA implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorA operation");
    }
}

class ConcreteImplementorB implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorB operation");
    }
}

// 抽象部分
abstract class Abstraction {
    protected Implementor implementor;

    protected Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }

    public abstract void operation();
}

// 扩展抽象部分
class RefinedAbstraction extends Abstraction {
    protected RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }

    public void operation() {
        System.out.println("RefinedAbstraction operation");
        implementor.operationImpl();
    }
}

// 客户端代码
public class BridgePattern {
    public static void main(String[] args) {
        Implementor implementorA = new ConcreteImplementorA();
        Abstraction abstractionA = new RefinedAbstraction(implementorA);
        abstractionA.operation();

        Implementor implementorB = new ConcreteImplementorB();
        Abstraction abstractionB = new RefinedAbstraction(implementorB);
        abstractionB.operation();
    }
}

优点

  • 将抽象部分与实现部分分离,降低了耦合性。
  • 抽象部分和实现部分可以独立变化,提高了系统的扩展性。
  • 符合单一职责原则,一个类只负责一个变化维度。

缺点

  • 增加了系统的复杂性,需要额外的代码来进行抽象和实现的分离。
2. 使用桥接模式实现图形和颜色的分离

思想:将图形和颜色作为两个独立变化的维度,通过桥接模式进行分离和组合。

实现方式

java 复制代码
// 实现部分接口
interface Color {
    void applyColor();
}

// 具体实现部分
class RedColor implements Color {
    public void applyColor() {
        System.out.println("Red color applied.");
    }
}

class GreenColor implements Color {
    public void applyColor() {
        System.out.println("Green color applied.");
    }
}

// 抽象部分
abstract class Shape {
    protected Color color;

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

    public abstract void draw();
}

// 扩展抽象部分
class Circle extends Shape {
    protected Circle(Color color) {
        super(color);
    }

    public void draw() {
        System.out.print("Circle drawn with ");
        color.applyColor();
    }
}

class Rectangle extends Shape {
    protected Rectangle(Color color) {
        super(color);
    }

    public void draw() {
        System.out.print("Rectangle drawn with ");
        color.applyColor();
    }
}

// 客户端代码
public class BridgePatternShapes {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedColor());
        redCircle.draw();

        Shape greenRectangle = new Rectangle(new GreenColor());
        greenRectangle.draw();
    }
}

优点

  • 将图形和颜色两个独立的维度分离开来,使得它们可以独立变化。
  • 可以在运行时动态地组合不同的图形和颜色,增加了系统的灵活性。
  • 符合开闭原则,可以方便地扩展新的图形和颜色。

缺点

  • 需要定义额外的类和接口,增加了系统的复杂性。
  • 在一定程度上,增加了系统的理解和维护难度。

总结

实现方式 优点 缺点
传统实现方式 将抽象部分与实现部分分离,降低耦合性,符合单一职责原则 增加了系统的复杂性,额外的代码和抽象层
使用桥接模式实现图形和颜色分离 图形和颜色可以独立变化,增加系统灵活性,符合开闭原则 增加了类和接口,增加了系统复杂性和理解难度

选择哪种实现方式应根据具体的需求和系统的复杂度来决定。如果系统中存在多个独立变化的维度,使用桥接模式可以降低耦合性,提高系统的扩展性和灵活性。

相关推荐
知兀1 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV1 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子2 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱
c++之路2 小时前
C++20概述
java·开发语言·c++20
Championship.23.242 小时前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮2 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken2 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步3 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿3 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl4 小时前
java面试-微服务组件篇
java·微服务·面试