桥接模式

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

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 }
View Code

Color:

1 interface Color {
2      String coloring(String str);
3 }
View Code

Rectangle:

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

Circle:

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

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 }
View Code

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 }
View Code

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 }
View Code

运行结果:

总结:

优点:

分离抽象接口及其实现部分。提高了比继承更好的解决方案,

防止类膨胀,将类的数量由m * n减少到m+n

提高了系统的扩展性

缺点:

桥接模式的引入会增加系统的设计难度,同时可能不利于理解

PS:有些场景下系统的多个维度并不会同时扩展,要灵活应用,可以结合缺省适配器模式

posted @ 2020-08-13 23:05  whyha  阅读(157)  评论(0)    收藏  举报