设计模式系列(四)-- 行为型

2019/2/27 posted in  设计模式

具体的实现Demo请进入DesignPatterns iOS工程实现查看

13. 责任链模式

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些
对象连接成一条链,并且沿着者条链传递请求,直到有对象处理它为止。
iOS里的事件传递。就是一种责任链模式
使用场景
有多个对象可以处理一个请求,具体哪个对象处理该请求由运行时自动确定。
在不确定指定接收者的情况写,向多个对象中的一个提交一个请求。

14:命令模式(很重要)

将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
使用场景
需要对行为进行记录撤销或者重做,事物等的处理时。凡是有命令的地方,都可以使用命令模式。命令模式实现了很容易对命令的扩展(即对扩展开放),添加一个命令就可以了,同过这些命令取修改接受者的状态,其实我们直接执行函数就可以修改接受者的状态,当我们需要添加一些行为的记录,撤销的等行为,为了将行为的实现者receiver与行为的请求者(既可以是receiver也可以是其他对象)实现松耦合。

15:解释器模式

16:迭代器模式

提供一种按顺序访问一个聚合对象中的各个元素。而又无需暴露该对象的内部表示。
迭代器的关键代码是实现hasNext,next。
迭代器简化并且统一了对于集合类型的访问方法。在新添加的集合类型里,无需修改原有代码,只需要实现针对这个心添加的集合的迭代器就可以了。所以对扩展时开放的。

17:中介者模式

中介者模式和我们日常生活中的中介者其实是一样的。房产中介。解决了买家与卖家之间错综复杂的关系。实现了。买家与中介联系,卖家与中介联系,当然这里协调的对象也可以是相同类型的比如都是"买家",我们把买家与卖家统一称为“同事”(这类在初看文章的时候不理解为什么都是”同事“,其是为了方便描述罢了。在实际的开发中,那你想协调哪两种或者多种对象之间的交互都是可以的)。在对象的世界里面,也是如此。
实际的例子

MVC里的模式,c就是中介者,m,v都是同事。c需要协调m与v的交互。那么从这里也可以看出。设计不当的时候很容易将c搞的比较复杂。
代码里的例子
同事之间有一定的关系。同事A修改的分值,同事B的分值同样会修改。同事C的值统一会修改。
那么就有个问题,我同事A修改了值,我还要通过A取修改B的值,B的值修改了,B还要去修改C的值。这样就是对象间非常复杂的操作关系。
引入中介这后,这个几个对象之间的关系就变成只有中介者之间交互。这样关系就轻松多了。

18:备忘录模式

保存一个对象的某个状态,以便在适当的时候恢复对象。
在不破话封装的前提下,捕获一个对象的内部状态,幷在该对象之外保存这个状态,这样可以
在以后将恢复到原先保存的状态。
实现代码的核心是搞一个备忘录的类。要保存状态的类可以实现协议方法,取出当前需要保存的
信息。和将保存的信息恢复为类的过程。整个是在需要备忘得对象实现的。
所以,备忘录其实,就时搞一个类专门实现“存”与"取"一个对象的状态,以备忘。

19:观察者模式

当一个对象的状态发生改变的时候,所有的依赖对象都将得到通知。
解决一对多的情况。
观察者模式,在iOS里到处都有。通知中心,Kvo,等.

20:状态模式(很重要,实际的开始中很常见)

对象的行为依赖于他的状态,并且可以根据它的状态的改变而改变相关的行为。
使用场景
当代码中包含有大量于状态有关的行为时。

21:策略模式

策略模式同状态模式一样,不同的是将策略进行隔离。当有新的策略时,只需要扩展新的策略就行了。

22:模板方法模式

23:访问者模式