前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android设计模式应用-桥接模式

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

作者头像
wust小吴
发布2019-07-08 17:56:27
6820
发布2019-07-08 17:56:27
举报
文章被收录于专栏:风吹杨柳风吹杨柳

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

实现代码:

先定义接口:

  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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档