Android 的设计模式分为3大类,一个23种。
策略模式应用于:ListAdapter、TimeInterpolator
定义:策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们可以相互替换。
应用场景:
同一类型问题的多种处理方式出现同一抽象类有多个子类,而又需要if-else或者switch-case来选择具体的子类时转:Android设计模式之(7)----状态模式
定义:
所谓状态模式,就是代表一个事物有多个状态。因为状态的变化而导致一系列的变化。
听起来和策略模式很相似,都是类似if-else,实际上策略模式侧重于算法的区别,而 状态模式更看重行为的控制。
策略模式应用于:Rxjava、回调
转:https://www.cnblogs.com/tangZH/p/11175120.html,例子清晰
定义: 观察者模式又被称作发布/订阅模式,主要是为了让观察者与被观察者之间进行解耦
用一个中介者对象来封装一系列的对象交互。 中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。
参考:https://blog.csdn.net/u011810352/article/details/78864908
访问者模式是一种将数据操作与数据结构分离的设计模式。
策略模式应用于:List、cursor
迭代器模式又称游标模式,也是行为型设计模式。源于对容器的访问,主要解决容器的遍历操作。
转:https://blog.csdn.net/qq_25806863/article/details/69258883
策略模式应用于:AsyncTask
定义: 定义一个操作中算法的框架,而将一些步骤延迟到子类中。
总结 模板方法模式就是流程封装,父类提取公用代码,子类实现部分或全部步骤。父类规定了整体流程。
策略模式应用于:Activity的Bundle savedInstanceState
定义: 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
例子转自:https://www.jianshu.com/p/ca7bae91f845
先创建一个我们要保存的状态集合类,保存歌名,播放模式,播放百分比 public class Memoto { String songName; String mode; Float percent; } 再创建一个单独管理状态集合类的类,用来保存和读取状态 public class Caretaker { Memoto memoto; public void saveMemoto (Memoto memoto) { this.memoto = memoto; } public Memoto getMemoto() { return memoto; } } 定义Mp3播放类,只是模拟功能,写的很简单 public class Mp3 { static final String TAG = Mp3.class.getSimpleName(); private String songName; private String mode; private float percent; public void play() { songName = "浮夸"; Log.d(TAG,"正在听 " + songName); mode = "低音炮"; Log.d(TAG,"当前播放模式 " + mode); percent = 0.15f; Log.d(TAG,"播放百分比 " + percent); } public void quit () { Log.d(TAG,"退出播放"); } public Memoto saveMemoto() { Memoto memoto = new Memoto(); memoto.songName = songName; memoto.mode = mode; memoto.percent = percent; return memoto; } public void restore(Memoto memoto) { songName = memoto.songName; mode = memoto.mode; percent = memoto.percent; Log.d(TAG,"恢复播放 歌曲: " + songName + " 播放模式: " + mode + " 播放百分比: " + percent); } }play模拟正在播放,saveMemoto用来间接访问状态。 restore用来恢复
最后我们来看下调用和log Mp3 mp3 = new Mp3(); Caretaker caretaker = new Caretaker(); mp3.play(); caretaker.saveMemoto(mp3.saveMemoto()); mp3.quit(); mp3.restore(caretaker.getMemoto());定义: 将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
定义: 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
策略模式应用于:事件分发 定义:
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递改请求,直到有对象处理它为止