快速理解桥接模式

来源:互联网 发布:尔雅网络通识课 编辑:程序博客网 时间:2024/06/02 04:14

桥接模式的目的是:分离抽象化和实现,使两者的接口可以不同,目的是分离。

桥接模式的角色有:

实现(Implementor):定义具体行为,具体特征的应用接口。

具体实现(ConcreteImplementor):实现Implementor。

目标接口(Target): 包含实现具体行为、具体特征的Implementor接口或者类。

桥接模式通过在Target里的操作,调用Implementor得操作,达到了Target的抽象与Implementor实现的分离。

如例程:Painter(Target)有画图形DrawShape操作,Painter里面包含了Shape(Implementor)接口,Painter的实现类RefinedPainter在自己的DrawShape操作中调用Shape的Draw和Paint操作。


通过例子,在来看看桥接模式起到的作用。在开发的时候设定Target和Implementor采用桥接机制,这样使得Target和Implementor的后续的接口定义和参数定义上有比较大的灵活度。打个比方,生成洗衣机有两个部门,一个是水管链接器,一个是生产进水管的。水管链接器部门就启动桥接模式,它告诉进水管生产部门,不用担心连不上,你们生成什么粗细的水管,都可以连上水龙头。这就在一开始就给生产进水管的部门很多自由度,实现了分离。


桥接模式与适配器模式在代码实现上是相同的。差别在于适配器模式是已经有一个进水管和家用水龙头存在了,这时候生产一个接头来连接进水管和水龙头,这个接头就是适配器。桥接是定下生产接头策略,再让进水管有开发的自由度。只是先后的问题。


试着写段程序:

  1. //Shape类  
  2. abstract class Shape{  
  3.     public abstract void Draw();  
  4.     public abstract void Paint();
  5. }  
  6. //具体工厂(每个具体工厂负责一个具体产品)  
  7. class Circle extends Shape{  
  8.     public void Draw(){  
  9.        printfln("Draw Circle");  
  10.     }  
  11.     public void Paint(){
  12.         printfln("Paint Circle")
  13.     }
  14. }  
  15. class Triangle extends Shape{  
  16.     public void Draw(){  
  17.         printfln("DrawTriangle ");  
  18.     }  
  19.     public void Paint(){
  20.         printfln("PaintTriangle ");
  21.     }
  22. }  
  23.    
  1. public abstract class Painter{
  2.     private Shape SP;
  3.     public SetImplementor(Shape sp){
  4.        SP = sp;
  5.     }
  6.     public void DrawShape();
  7. }
  8. public class RefinedPainter extends Painter
  9.     public void DrawShape(){
  10.         SP.Draw();
  11.         SP.Paint();
  12.     }
  13. }
  1. //测试  
  2. public class Test{  
  3.       public static void main(String[] args){  
  4.        RefinedPainter  refinedPainter = new RefinedPainter ();
  5.        refinedPainter.SetImplementor(new Circle()); 
  6.        refinedPainter.DrwaShape();
  7.        refinedPainter.SetImplementor(new Triangle());
  8.        refinedPainter.DrwaShape();
  9.     }  
  10. }

0 0
原创粉丝点击