Android系统设计中的设计模式分析之二


Factory:

标准设计模式中存在两种工厂模式,可以参见下面这两个地址,里面有详细的介绍。
Factory
http://blog.csdn.net/cjjky/article/details/7314118
Abstract Factory
http://blog.csdn.net/cjjky/article/details/7346893
其要点都在于Client只关心抽象工厂和抽象产品,而不关心具体的工厂和工厂创建出来的具体的产品是什么。
另外,对Android中存在的Factory进行了整理,大概分了两类:
一类是产品唯一且固定的,与标准的工厂模式定义不一样,但也算是对工厂模式的活学活用。
SSLCertificateSocketFactory
Socket createSocket(String host, int port, InetAddress localAddr, int localPort)
Socket createSocket(InetAddress addr, int port)
BitmapFactory
Bitmap decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
Bitmap decodeByteArray(byte[] data, int offset, int length)
Bitmap decodeFile(String pathName)
另一类是算是标准的工厂模式。Android定义了抽象工厂ViewSwitcher.ViewFactory和ViewSwitcher.ViewFactory,还定义了抽象产品View
ViewSwitcher.ViewFactory
View makeView()
LayoutInflater.Factory
View onCreateView(String name, Context context, AttributeSet attrs)


Builder:
参见:http://blog.csdn.net/cjjky/article/details/7327200
标准设计模式中的Builder规定由抽象Builder把构建对象的各个步骤定义好抽象方法,具体实现类Builder去实现这些抽象方法,从而构造出不同的对象。
而Android中的Builder模式稍稍变通了一下,没有抽象Builder角色,直接为一个对象配备了固定的Builder,然后在Builder中把构造对象的步骤开放出来,由使用者分步调用。如:
AlertDialog.Builder
Notification.Builder
Uri.Builder


Stategy:
参见:http://blog.csdn.net/cjjky/article/details/7322688
每一个具体的Interpolator都代表一个具体的算法。Interpolator类对它们进行了抽象,扮演了一个Strategy角色。而Animator算是使用Strategy的Context。


Proxy:
参见:http://blog.csdn.net/cjjky/article/details/7330657
代理模式的四种应用场合:
第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
第三:安全代理,用来控制真实对象访问时的权限。
第四:智能引用,是指当调用真实对象时,代理处理另外一些事。
Android中的AIDL属于第一种应用。


Observer:
参见:http://blog.csdn.net/cjjky/article/details/7384951
模式的应用场景及特点
1、多个不同的对象都对同一个对象的状态改变感兴趣。
2、对象之间要求很松散的耦合时使用。
3、可以向Observerable中添加/删除Observer
4、Observerable对Observer的数量不做限制,有状态改变时通知所有的Observer。


Decorator:
参见:http://blog.csdn.net/cjjky/article/details/7478788
个人见解:
除模式本身定义的场景外,还比较适用于被包装的类不能继承、不了解细节的情况。比如从Resolver中获取到系统的Cursor时,实际只取到了Cursor这个接口,如果想扩展Cursor的功能而又不改变接口,只有Decorator最合适。这种情况下是无法继承的。


Facade:
参见:http://blog.csdn.net/cjjky/article/details/7570632
实现一个功能需要先调用A的a方法,再调用B的b方法,再调用C的c方法时,可以定义一个Facade类,在里面包含了对a,b,c的调用集合。这样外部使用一个Facade就可以了。


State:
参见:http://blog.csdn.net/cjjky/article/details/7585207
当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值