序列化
JNI/NDK
设计模式使用案例
观察者模式
定义一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。
Android 中的
View.setOnClickListener()
就是观察者模式,按钮点击事件发生时,注册的监听器(观察者)会被通知。
装饰器模式
在不改变原有对象的前提下,动态地给对象添加额外的功能。强调包装而不是继承,避免类爆炸。
Java IO:
BufferedInputStream
装饰了InputStream
,在原始读写功能上增加了缓存,提高效率。Java 集合:
Collections.synchronizedList()
方法装饰一个 List,在原有方法的基础上增加了 synchronized 关键字,实现线程安全。
建造者模式
将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。解决构造函数参数过多、可选参数复杂的问题。
StringBuilder:通过链式调用一步步构建字符串;
安卓中的 AlertDialog.Builder:通过
setTitle()
,setMessage()
,setPositiveButton()
等方法,最后create().show()
;okHttp:
OkHttpClient
、Request
都是 Builder;
策略模式
定义一系列算法,把它们封装起来,使得它们可以互相替换,客户端可在运行时选择不同的算法。强调行为可替换。
排序算法:Java 的
Comparator
,可以传入不同的比较策略,达到不同的排序效果。支付系统:不同支付方式(支付宝、微信、银行卡)可以抽象为不同策略,统一接口
pay()
,在运行时根据用户选择切换。