sheet
[Read More]
桥接模式
一个功能有不同的维度需要整合,可以使用桥接给他们建立联系
使用场景
实现方式
完成一个功能需要整合不同的维度,两个维度又不相干,不能是用继承去解决,这时候就使用桥接模式去实现
有几个定义不同维度动作的接口或者抽象类,通过一个Implementor 去组合他们不同的实现,例如有 a 与 b, 在 b 中 调用提供的 a
项目中实践
在做 IM 项目的时候使用了这种模式,具体地,就是桥接实现了消息处理和消息分发的功能,这样可以最小限度的影响原有代码,使得原来的代码不会受到大影响
[Read More]
适配器模式
某个模块的输出与需要模块的输入不匹配使用适配器转换
使用场景
实现方式
某些模块的输出不能直接匹配使用模块的格式,需要在中间增加一层 adapter 将输出转换为用户模块感兴趣的输入类型
定义 adapter 接口,按需转换为目标类型
项目中实践
最多的是 recyclerview 里面数据转换为对应的 holder 的应用
[Read More]
观察者模式
一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度
使用场景
实现方式
使用场景为一群观察者对一个被关注对象感兴趣,被观察对象将观察者添加到自己的 list 中,自身有变化了就会通知我有变化了,然后观察者通过对应方法去取自己感兴趣的
三个角色,一个被观察者,一些观察者,还有一个负责组合他们,值得注意的是观察者是依托在被观察者身上的,观察者模式相对于监听者不知道哪里变化了,只会通知 update
注意事项
1. 注意内存泄漏 2. 注意线程间关系 3.注意线程同步的问题,因为可能会同时操作一个 list 4. 注意循环依赖或者观察
[Read More]
监听者模式
一般用于针对单一事件的超强烈兴趣
使用场景
实现方式
使用场景为对某一事件或者数据强烈感兴趣,listener 会回调感兴趣的数据回来,Android 中使用最多的是 setOnClickListener
有一个被监听者,他负责收集监听者并且在有事件或者数据产生的时候遍历回调给监听者,注意 register 与 unregister 要成对出现
注意事项
1. 注意内存泄漏 2. 注意线程间关系 3.注意线程同步的问题,因为可能会同时操作一个 list
[Read More]