设计模式-桥接模式

设计模式-桥接模式

桥接模式(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'
相关推荐
晨米酱14 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机19 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机20 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机20 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机20 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤20 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式