设计模式-桥接模式

设计模式-桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,其主要目的是将抽象部分和实现部分分离,使它们可以独立变化。在桥接模式中,一个抽象类与它的实现可以独立演化,从而降低耦合度,提高系统的可扩展性和灵活性。

桥接模式的角色主要包括:

  1. Abstraction(抽象类):定义抽象类的接口,持有对Implementor(实现类)对象的引用,它负责与Implementor进行交互,但不负责其实现细节。
  2. Refined Abstraction(具体抽象类):继承自Abstraction,为Abstraction接口提供更具体的实现,定义与客户期望相一致的接口。
  3. Implementor(实现接口/抽象类):定义实现类的接口,不给出具体实现,而是由Concrete Implementor提供。
  4. Concrete Implementor(具体实现类):实现Implementor接口,提供不同的实现方式。抽象类和具体实现类之间通过Implementor接口进行通信。

桥接模式的应用场景:

  • 当系统中某个类存在两个独立变化的维度,而且这两个维度都需要进行扩展时。
  • 不希望在抽象类中固定具体实现,而希望抽象类和实现类可以独立扩展。

桥接模式的优点:

  • 分离抽象和实现,使得两者可以独立变化和发展。
  • 提高系统的可扩展性和灵活性,减少代码冗余。
  • 更好的符合开闭原则,对修改关闭,对扩展开放。

桥接模式的缺点:

  • 会增加系统的复杂性,增加了额外的抽象层和对象间的关系。

代码实际应用:

形状:圆型,正方形; 颜色:蓝色,红色

java 复制代码
/**
 * 颜色抽象接口
 */
public interface Color {
    /**
     * 打印颜色
     */
    void applyColor();
}
java 复制代码
/**
 * 具体颜色的实现-红色
 */
public class RedColor implements Color{

    @Override
    public void applyColor() {
        System.out.println("正在应用红色");
    }
}
java 复制代码
/**
 * 具体颜色的实现-蓝色
 */
public class BlueColor implements Color{
    @Override
    public void applyColor() {
        System.out.println("正在应用蓝色");
    }
}
java 复制代码
/**
 * 图形抽象接口
 */
public interface Shape {
    /**
     * 打印信息
     */
    void draw();

    /**
     * 给图形赋予颜色
     */
    void setColor(Color color);
}
java 复制代码
/**
 * 形状具体实现类-正方形
 */
public class Square implements Shape{
    private Color color;

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

    @Override
    public void draw() {
        System.out.println("正在绘制正方形...");
        color.applyColor();
    }

    @Override
    public void setColor(Color color) {
        this.color = color;
    }
}
java 复制代码
/**
 * 具体图形的实现-圆
 */
public class Circle implements Shape{
    private Color color;

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

    @Override
    public void draw() {
        System.out.println("正在绘制圆形...");
        color.applyColor();
    }

    @Override
    public void setColor(Color color) {
        this.color = color;
    }
}
java 复制代码
/**
 * 桥接模式客户端
 */
public class BridgingDemo {
    public static void main(String[] args) {
       // 创建圆形 + 蓝色
        Circle circle = new Circle(new BlueColor());
        circle.draw();
        System.out.println("=== === === ");
        // 创建长方形 + 红色
        Square square = new Square(new RedColor());
        square.draw();
        System.out.println("=== === ===");
        // 更改长方形颜色
        square.setColor(new BlueColor());
        square.draw();
    }
}

打印结果:

java 复制代码
Connected to the target VM, address: '127.0.0.1:48007', transport: 'socket'
正在绘制圆形...
正在应用蓝色
=== === === 
正在绘制正方形...
正在应用红色
=== === ===
正在绘制正方形...
正在应用蓝色
Disconnected from the target VM, address: '127.0.0.1:48007', transport: 'socket'
相关推荐
步行cgn12 小时前
适配器设计模式:一个“翻译官”的故事
设计模式
扶尔魔ocy16 小时前
【QT C++】常用设计模式
c++·设计模式
她说..17 小时前
常见设计模式-观察者模式
java·spring boot·spring·观察者模式·设计模式
是2的10次方啊18 小时前
设计模式与生活⑨:一碗胡辣汤,用不着认识十几种香料
设计模式
geovindu2 天前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
是2的10次方啊2 天前
设计模式与生活⑧:快递到了,别一直刷物流
设计模式
raindayinrain3 天前
c++设计模式
开发语言·c++·设计模式
工一木子3 天前
设计模式与生活⑦:你打的车,隔着一个平台
设计模式
电子科技圈3 天前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
电子科技圈3 天前
Arm电机控制开发工具哪家强?
arm开发·单片机·嵌入式硬件·设计模式·软件构建