桥接模式
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
UML:
Cast:
画一个图形,可以画长方形、正方形、圆形、三角形等;每个形状可以有白色、红色、蓝色、黄色、绿色等,最简单的实现方式就是实现每种形状不同颜色的版本,如图
显然,这种方式不利于扩展
另一种方式是将形状和颜色提取出来,进行组合
这样,减少了类的数量,也方便扩展
Sharp:

1 public abstract class Shape { 2 Color color; 3 4 public void setColor(Color color) { 5 this.color = color; 6 } 7 8 public abstract void draw(); 9 }
Color:

1 interface Color { 2 String coloring(String str); 3 }
Rectangle:

1 public class Rectangle extends Shape { 2 @Override 3 public void draw() { 4 System.out.println(color.coloring("Rectangle")); 5 } 6 }
Circle:

1 public class Circle extends Shape { 2 @Override 3 public void draw() { 4 System.out.println(color.coloring("Circle")); 5 } 6 }
Red:

1 public class Red implements Color { 2 private String red = "\033[31;2m"; 3 4 @Override 5 public String coloring(String str) { 6 return red + str + red; 7 } 8 }
Blue:

1 public class Blue implements Color { 2 private String blue = "\033[34;2m"; 3 4 @Override 5 public String coloring(String str) { 6 return blue + str + blue; 7 } 8 9 }
Client:

1 public static void main(String[] args) { 2 Shape circle = new Circle(); 3 circle.setColor(new Blue()); 4 circle.draw(); 5 6 Shape rectangle = new Rectangle(); 7 rectangle.setColor(new Red()); 8 rectangle.draw(); 9 }
运行结果:
总结:
优点:
分离抽象接口及其实现部分。提高了比继承更好的解决方案,
防止类膨胀,将类的数量由m * n减少到m+n
提高了系统的扩展性
缺点:
桥接模式的引入会增加系统的设计难度,同时可能不利于理解
PS:有些场景下系统的多个维度并不会同时扩展,要灵活应用,可以结合缺省适配器模式