桥接模式(Bridge)


前言

设计模式系列代码均持续更新在我的gitHub:to github


普通实现模式类图

  • 图形(graph)有2个维度的属性,一个是形状(shape),一个是颜色(color)
  • 类图如下:


  • 此时想要增加一个三角形(triangle)就得多写四个类


桥接模式类图

  • 此时想添加三角形(triangle)只需要写一个继承Shape类的Triangle类就行了
  • 对于 形状(shape) 和 颜色(color) 这2个不同维度的属性来说,由于 Shape类聚合了Color接口,相当于将2个属性用"桥"连接起来了


部分代码

public interface Color {
    void printColor();
}
public class Red implements Color {
    public void printColor() {
        System.out.print("红色的");
    }
}
public abstract class Shape {

    private Color color;

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

    protected void  printColor() {
        this.color.printColor();
    }

    abstract void printShape();
}
public class Circle extends Shape {
    
    public Circle(Color color) {
        super(color);
    }

    public void printShape() {
        printColor();
        System.out.println("圆形...");
    }
}


总结

1、优点

  • 抽象与实现分离,扩展能力强
  • 符合开闭原则
  • 符合合成复用原则
  • 其实现细节对客户透明

2、缺点

  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

你可能感兴趣的:(桥接模式(Bridge))