您的位置:首页 > 移动开发 > Android开发

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

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

看看关系图:





实现代码:

先定义接口:

public interface Sourceable {
public void method();
}

分别定义两个实现类:

public class SourceSub1 implements Sourceable {

@Override
public void method() {
System.out.println(“this is the first sub!”);
}
}

public class SourceSub2 implements Sourceable {

@Override
public void method() {
System.out.println(“this is the second sub!”);
}
}

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

public abstract class Bridge {
private Sourceable source;

public void method(){
source.method();
}

public Sourceable getSource() {
return source;
}

public void setSource(Sourceable source) {
this.source = source;
}
}

public class MyBridge extends Bridge {
public void method(){
getSource().method();
}
}

测试类:

public class BridgeTest {

public static void main(String[] args) {

Bridge bridge = new MyBridge();

/*调用第一个对象*/
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();

/*调用第二个对象*/
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: