设计模式之桥接模式

2024-04-15 08:00:16 浏览数 (2)

桥接模式(Bridge)

定义

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

使用场景

主要角色

  1. 抽象部分(Abstraction): 定义了系统的高层结构,维护一个对实现部分的引用,并定义了抽象部分的接口。抽象部分的实现通常委托给实现部分。
  2. 扩展抽象部分(RefinedAbstraction): 继承自抽象部分,对抽象部分的接口进行扩展或增强,通常包含一些高层次的业务逻辑。
  3. 实现部分(Implementor): 定义了抽象部分规定的接口,并为这些接口提供具体的实现。实现部分的变化不会影响抽象部分,两者通过组合关系而不是继承关系建立联系。
  4. 具体实现部分(ConcreteImplementor): 继承自实现部分接口,实现具体的业务逻辑。系统可能有多个具体实现部分,它们可以在运行时替换而不影响抽象部分。

类图

示例代码

代码语言:javascript复制
public abstract class Shape {
    protected Color color;

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

    abstract void draw();
}
代码语言:javascript复制
public class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.println(color.getColor()   " Circle");
    }
}
代码语言:javascript复制
public class Square extends Shape {
    public Square(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.print(color.getColor()   " Square");
    }
}
代码语言:javascript复制
public interface Color {
    String getColor();
}
代码语言:javascript复制
public class Red implements Color {

    @Override
    public String getColor() {
        return "Red";
    }
}
代码语言:javascript复制
public class Green implements Color {
    @Override
    public String getColor() {
        return "Green";
    }
}
代码语言:javascript复制
public class Client {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new Red());
        Shape greenSquare = new Square(new Green());

        redCircle.draw();
        greenSquare.draw();
    }
}
代码语言:javascript复制
Red Circle
Green Square

工作中遇到场景

0 人点赞