Android设计模式应用-桥接模式

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化

看看关系图:

实现代码:

先定义接口:

  1. public interface Sourceable {  
  2.     public void method();  
  3. }  

分别定义两个实现类:

  1. public class SourceSub1 implements Sourceable {  
  2.   
  3.     @Override  
  4.     public void method() {  
  5.         System.out.println(“this is the first sub!”);  
  6.     }  
  7. }  
  1. public class SourceSub2 implements Sourceable {  
  2.   
  3.     @Override  
  4.     public void method() {  
  5.         System.out.println(“this is the second sub!”);  
  6.     }  
  7. }  

定义一个桥,持有Sourceable的一个实例:

  1. public abstract class Bridge {  
  2.     private Sourceable source;  
  3.   
  4.     public void method(){  
  5.         source.method();  
  6.     }  
  7.       
  8.     public Sourceable getSource() {  
  9.         return source;  
  10.     }  
  11.   
  12.     public void setSource(Sourceable source) {  
  13.         this.source = source;  
  14.     }  
  15. }  
  1. public class MyBridge extends Bridge {  
  2.     public void method(){  
  3.         getSource().method();  
  4.     }  
  5. }  

测试类:

  1. public class BridgeTest {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         Bridge bridge = new MyBridge();  
  6.           
  7.         /*调用第一个对象*/  
  8.         Sourceable source1 = new SourceSub1();  
  9.         bridge.setSource(source1);  
  10.         bridge.method();  
  11.           
  12.         /*调用第二个对象*/  
  13.         Sourceable source2 = new SourceSub2();  
  14.         bridge.setSource(source2);  
  15.         bridge.method();  
  16.     }  
  17. }  

output:

this is the first sub!
this is the second sub!

这个例子确实很容易懂,无非就是具体实现可以通过桥重新设置,如测试代码中  分别申请了两个对象,set函数就起到了桥的左右,将具体的实现独立出来了,重新设置,再调用函数输出就不一样了,也就是实现了抽象和具体实现之间的解耦作用,


抽象部分和  实现部分进行分离   使得他们可以独立的变化,这里面的抽象指的是方法的抽象或者叫功能的抽象,不是类。

android中的应用:例子,不同的窗口与窗口的实现,不同的视图与视图的绘制  都是采用桥接模式

不同的手机有不同的窗口大小,android应用程序是怎么知道展现多大的窗口呢,

不同的手机视图之间的绘制也不同,采用的图片也不一样,

即使是同一款手机,由于硬件配置不一样,可能导致某些功能桥接选择的具体实现也不一样


其实这里面有人就说,这是适配吧,这听起来多么的像适配器啊,比如说屏幕适配,其实他们两个之间是有区别的,

桥接模式在程序启动之前就可以确定好,是使用哪个的,

适配器模式是把不同接口之间无法完成的合作  搞定,让他们能够共同作用为某件事工作

下面:

android系统中不同的视图构成的视图树与完成视图的绘制功能的类之间


Android设计模式应用-桥接模式_第1张图片

这个类图关系很清楚的说明了,抽象部分和实现部分都是独立的,view是整个视图的基类,

抽象部分:具有绘制视图的子类

图中不同的视图如Button、ImageView、TextView构成了一个抽象派生层次视图树,在视图树中View是所有视图的根视图

实现部分:ondraw

View的绘制通过三个不同的能独立演化的类来实现:

1.Canvas(提供绘制表面)、

2.HardwareLayer(提供输出显示层)--硬件缓存

3.DisplayList(代表一个绘制操作)--硬件加速渲染


结果就是不同的视图(view,抽象子类)可以采用不同的绘制方法(实现部分)来实现

例如textview 一般就是采用在宿主窗口上绘制的,

surfaceview就是采用直接与硬件进行绘制了,GL

你可能感兴趣的:(Android学习)