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();
    }
}

优点

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

缺点

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

总结

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

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

相关推荐
hqxstudying18 分钟前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
Dcs37 分钟前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
保持学习ing43 分钟前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者1 小时前
Java的SPI机制详解
java
超级小忍1 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug1 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享1 小时前
Java Lombok 入门
java
程序无bug1 小时前
Spring 对于事务上的应用的详细说明
java·后端
食亨技术团队1 小时前
被忽略的 SAAS 生命线:操作日志有多重要
java·后端
苦学编程的谢2 小时前
Maven
java·maven·intellij-idea