桥接模式(bridger) - 图1


桥接模式,组合两个对象的机器,比如我们拿画笔为例子,笔有铅笔、蜡笔、水彩笔等等,而不同的笔又有不同的颜色,如果我们用七种颜色和三只不同种类的笔的话,按照普通的逻辑,我们就需要创建二十一个类来对应不同的笔,但是有的同学就会讲了可以用工厂模式啊,对的,但是我们看待问题的角度不一样,之所以称工厂模式为创建型模式,就是用这种方法来构建出现实对象。而桥接模式是属于结构型,就是两个对象通过用一种协同的模式,让他们达到想要的逻辑。

UML

uml图就是banner图,不再复述

案例

还是采用简介上面的例子,用桥接模式来实现它。

  1. 首先我们创建图形抽象类,这个抽象类是关键,它里面必须包含我们实现类的接口,也就是说颜色的接口
  1. public abstract class Shape {
  2. Color color;
  3. public void setColor(Color color) {
  4. this.color = color;
  5. }
  6. public abstract void draw();
  7. }
  1. 然后是三个形状
  1. public class Circle extends Shape{
  2. public void draw() {
  3. color.bepaint("正方形");
  4. }
  5. }
  6. public class Rectangle extends Shape{
  7. public void draw() {
  8. color.bepaint("长方形");
  9. }
  10. }
  11. public class Square extends Shape{
  12. public void draw() {
  13. color.bepaint("正方形");
  14. }
  15. }
  1. 颜色接口
  1. public interface Color {
  2. public void bepaint(String shape);
  3. }
  1. 然后是具体的颜色
  1. public class White implements Color{
  2. public void bepaint(String shape) {
  3. System.out.println("白色的" + shape);
  4. }
  5. }
  6. public class Gray implements Color{
  7. public void bepaint(String shape) {
  8. System.out.println("灰色的" + shape);
  9. }
  10. }
  11. public class Black implements Color{
  12. public void bepaint(String shape) {
  13. System.out.println("黑色的" + shape);
  14. }
  15. }
  1. 最关键就看我们这个调用过程了,我们先创建白色的实现类,然后创建正方形图形,关键是融合的这一点,我们将图形上色,运用java多态的特性,设置白色的实现类,然后绘制图形的方法里再反过来调用颜色的绘制方法就实现了两个独立对象合作完成一件事情,而不是创建出一只白色的笔,再去绘制,这就区分出工厂和桥接的区别了。
  1. public class Client {
  2. public static void main(String[] args) {
  3. //白色
  4. Color white = new White();
  5. //正方形
  6. Shape square = new Square();
  7. //白色的正方形
  8. square.setColor(white);
  9. square.draw();
  10. }
  11. }