android 责任链模式

计算机软件 时间:2016-07-15 我要投稿
【www.pincai.com - 计算机软件】

最近在继续iPhone业务的同时还需要重新拾起Android。在有些生疏的情况下,决定从Android源码中感悟一些Android的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。

职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

Android系统中根据XML排布文件创建界面的过程中通常需要针对不同类型的控件通过各种工厂生成。考虑到效率问题,Android采用了一个标准职责链模式的变种,我将这称之为“AB计划”。区别示意图如下所示:

clip_image002

标准职责链

clip_image004

AB计划职责链

LayoutInflater中的工厂职责链设计如下图所示:

clip_image006

其中FactoryMerger包含两个工厂f1和f2,创建时候会先通过f1创建,如果失败会尝试f2。而且由于FactoryMerger也实现了Factory接口,因此也可以聚合到更高一层的FactoryMerger。和标准职责链模式相比,无法确保各个链节之间的先后关系,但如果聚合合理就可以有效减少递归次数,实现代码如下:

public interface Factory {

public View onCreateView(String name, Context context, AttributeSet attrs);

}

private static class FactoryMerger implements Factory {

private final Factory mF1, mF2;

FactoryMerger(Factory f1, Factory f2) {

mF1 = f1;

mF2 = f2;

}

public View onCreateView(String name, Context context, AttributeSet attrs) {

View v = mF1.onCreateView(name, context, attrs);

if (v != null) return v;

return mF2.onCreateView(name, context, attrs);

}

}

其中,Factory 和FactoryMerger 分别是LayoutInflater内嵌接口和内嵌类。


[android 责任链模式]相关文章: