每天记录学习的新知识 :Android 设计模式之行为型

tech2024-02-23  89

文章目录

前言创建型行为型结构型 行为型设计模式学习6. 策略模式7. 状态模式8. 观察者模式9. 中介者模式10. 访问者模式11. 迭代器模式12. 模板方法13. 备忘录模式14. 命令模式15. 解释器模式16. 职责链模式


前言

Android 的设计模式分为3大类,一个23种。

创建型

单例模式; 2. Builder模式; 3. 原型模式; 4. 工厂方法; 5. 抽象工厂

行为型

策略模式; 7. 状态模式; 8. 观察者模式; 9. 中介者模式; 10. 访问者模式; 11. 迭代器模式; 12. 模板方法; 13. 备忘录模式; 14. 命令模式; 15. 解释器模式; 16. 职责链模式

结构型

组合模式; 18. 代理模式; 19. 装饰模式; 20. 外观模式; 21. 享元模式; 22. 桥接模式; 23. 适配器模式

行为型设计模式学习

6. 策略模式

策略模式应用于:ListAdapter、TimeInterpolator

定义:策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们可以相互替换。

应用场景:

同一类型问题的多种处理方式出现同一抽象类有多个子类,而又需要if-else或者switch-case来选择具体的子类时

7. 状态模式

转:Android设计模式之(7)----状态模式

定义:

所谓状态模式,就是代表一个事物有多个状态。因为状态的变化而导致一系列的变化。

听起来和策略模式很相似,都是类似if-else,实际上策略模式侧重于算法的区别,而 状态模式更看重行为的控制。

8. 观察者模式

策略模式应用于:Rxjava、回调

转:https://www.cnblogs.com/tangZH/p/11175120.html,例子清晰

定义: 观察者模式又被称作发布/订阅模式,主要是为了让观察者与被观察者之间进行解耦

9. 中介者模式

用一个中介者对象来封装一系列的对象交互。 中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

参考:https://blog.csdn.net/u011810352/article/details/78864908

10. 访问者模式

访问者模式是一种将数据操作与数据结构分离的设计模式。

11. 迭代器模式

策略模式应用于:List、cursor

迭代器模式又称游标模式,也是行为型设计模式。源于对容器的访问,主要解决容器的遍历操作。

12. 模板方法

转:https://blog.csdn.net/qq_25806863/article/details/69258883

策略模式应用于:AsyncTask

定义: 定义一个操作中算法的框架,而将一些步骤延迟到子类中。

总结 模板方法模式就是流程封装,父类提取公用代码,子类实现部分或全部步骤。父类规定了整体流程。

13. 备忘录模式

策略模式应用于: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());

14. 命令模式

定义: 将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

15. 解释器模式

定义: 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

16. 职责链模式

策略模式应用于:事件分发 定义:

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递改请求,直到有对象处理它为止

最新回复(0)