- 相关推荐
android 责任链模式
最近在继续iPhone业务的同时还需要重新拾起Android。在有些生疏的情况下,决定从Android源码中感悟一些Android的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。
职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
Android系统中根据XML排布文件创建界面的过程中通常需要针对不同类型的控件通过各种工厂生成。考虑到效率问题,Android采用了一个标准职责链模式的变种,我将这称之为“AB计划”。区别示意图如下所示:
标准职责链
AB计划职责链
LayoutInflater中的工厂职责链设计如下图所示:
其中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 责任链模式】相关文章:
制造企业供应链下物流管理运作模式论文07-04
android就业前景201607-03
2016android就业前景07-03
2016年android就业前景如何07-03
诺基亚会推出 Android 手机吗?07-12
如何面试 Android 工程师?07-13
提高网站权重,关注反链和外链07-14
爱之链作文04-27
诺基亚手机怎样运行Android图案解锁07-12
诺基亚为什么不出高端Android机?07-12