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

2019-07-08 17:56:27 浏览数 (1)

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

实现代码:

先定义接口:

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

分别定义两个实现类:

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

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

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

测试类:

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

output:

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

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

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

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

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

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

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

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

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

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

下面:

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

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

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

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

实现部分:ondraw

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

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

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

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

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

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

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

0 人点赞