深圳幻海软件技术有限公司 欢迎您!

设计模式系列-桥接模式

2023-02-28

 桥接模式用于将抽象部分与它的实现部分分离,使他们可以独立的变化。这句话不是很好理解,我来简单翻译一下,大概就是将一个事物的两个维度的变化解耦开。举个例子我们来看个毛笔和蜡笔的例子,假设我们需要大中小三种型号的画笔,能够绘制5种不同的颜色,如果使用蜡笔那么我们需要15只,如果使毛笔的话,我

 桥接模式用于将抽象部分与它的实现部分分离,使他们可以独立的变化。这句话不是很好理解,我来简单翻译一下,大概就是将一个事物的两个维度的变化解耦开。

举个例子

我们来看个毛笔和蜡笔的例子,假设我们需要大中小三种型号的画笔,能够绘制5种不同的颜色,如果使用蜡笔那么我们需要15只,如果使毛笔的话,我们只需要3只,外加5种颜料盒就OK。这里的关键点在于,毛笔可以做到将笔的型号和颜色解耦开,使他们可以独立的变化,这就是桥接模式。

先来看一下UML图:

再来看一下具体代码如何实现。

public interface Color { 
    String draw(); 

  • 1.
  • 2.
  • 3.

红颜色

public class RedColor implements Color { 
    @Override 
    public String draw() { 
        return "红色"
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

定义抽象的毛笔

public abstract class BrushPen { 
 
    //桥接画笔和颜色 
    protected Color color; 
 
    public void setColor(Color color){ 
        this.color = color; 
    } 
 
    public abstract void operation(); 
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

定义一个小号的毛笔

public class SmallBrushPen extends BrushPen { 
    @Override 
    public void operation() { 
        System.out.println(this.color.draw() + " 小号毛笔"); 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

客户端这样使用桥接模式

public class BridgeBrushPenDemo { 
    public static void main(String[] args){ 
        BrushPen smallBrushPen = new SmallBrushPen(); 
        //红色小号毛笔 
        smallBrushPen.setColor(new RedColor()); 
        smallBrushPen.operation(); 
        //绿色小号毛笔 
        smallBrushPen.setColor(new Green()); 
        smallBrushPen.operation(); 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

总结

桥接模式是结构型模式,当事物涉及多个维度的变化时,使用桥接模式可以大大降低系统复杂度,这个模式也是我认为的最难理解的一个设计模式。