设计模式在Android源码中的应用
只是列个大纲供学习完设计模式后复习用,包含一句话总结和JDK/Android SDK中的例子。详细的解析参考其他分析文章
创建型模式
1.工厂方法模式(Factory method pattern)
抽象创建实例的方法
- Iterable
2.抽象工厂模式(Abstract factory pattern)
抽象一系列创建实例的方法
- PreferencesFactory
- Dictionay
3.生成器模式/建造模式(Builder Pattern)
实例创建过程可控
- Dialog.Builder
- Notification.Builder
- Uri.Builder
4.单例模式(Singleton)
保证实例唯一
- Runtime
- InputMethodManager
5.原型模式(Prototype pattern)
复制粘贴
- Intent.clone
- Bundle.clone
- GregorianCalendar.clone
结构型模式
6.适配器模式/包装(Adapter/Wrapper)
A接口转B接口
- Arrays.asList:T[] -> List<T>
7.装饰模式/修饰模式(Decorator)
A接口转A+接口
- Context的ContextImpl实现和ContextWrapper继承树
- java.io中的流
8.代理模式(Proxy Pattern)
A接口转A接口
- Collections.synchronizedXXX
9.外观模式(Facade)
A1A2A3B1B2C1C2C3C4接口转ABC接口
- JNI?不是很确定。
10.桥接模式(Bridge)
A继承B转A和B,A和B都能独自扩展
- MVP
- AdapterView-Adapter
11.组合模式(Composite)
大卡车和小轿车都是汽车,大卡车能拉小轿车
- 透明方式:
- 安全方式:View-ViewGroup
12.享元模式(Flyweight Pattern)
SpaceX,回收接着用,炸了/还没回来又需要新的话,再造一个
- Message.obtain
- Executors.newCachedThreadPool
行为型模式
13.策略模式(Strategy pattern)
定义好行为的接口,调用者固定,实现不同导致行为不同
- 动画插值器Interpolator
- RecyclerView-LayoutManager
14.模板方法模式(Template method pattern)
定义好方法,调用者固定,实现者按规矩实现
钩子方法
- View的draw(Canvas)
- ViewGroup的layout(boolean,int,int,int,int)
- ViewGroup的onInterceptTouchEvent(MotionEvent)
- 生命周期函数
- Activity的onSaveInstanceState(Bundle)、onRestoreInstanceState(Bundle)
- SqliteOpenHelper的onCreate、onUpdate
15.观察者模式(Observer pattern)
一个通知多个
- Adapter的DataSetObserver
- ViewTreeObserver
- TextWatcher
- LifecycleObserver
16.迭代器模式(Iterator pattern)
统一遍历模式,遍历行为可控
- Iterator
- Cursor
- Enumeration
17.责任链模式(Chain-of-responsibility pattern)
踢皮球
- View事件分发
- 有序广播
18.命令模式(Command pattern)
可重复、可取消地执行
- Handler-Looper-Message
- ExecutorService
19.备忘录模式(Memento pattern)
存档-读档
- Activity-savedInstanceState
- Fragment-arguments
20.状态模式(State pattern)
将大量条件判断转为状态类
- 没找到
21.访问者模式(Visitor pattern)
收件人(数据)-分拣站(数据结构)-快递员(访问者),数据结构不变、访问者频繁变动下使用。
快递员(访问者)知道每个具体收件人(动态分配),分拣站(数据结构)存有收件人信息供快递员访问。
快递员(访问者)增减不会影响整个系统,只需新增快递员认路(实现访问者方法)即可,而当收件人变动时所有快递员都需要认路。
违反了最少知道原则(快递员需要知道每个具体收件人)。
很少使用。
- 没找到
22.中介者模式(Mediator pattern)
n->n 转 n->1->n
- EventBus
- 广播
- PenddingIntent
23.解释器模式(Interpreter pattern)
内嵌其他语言
- Runtime.exec