用OC代码认识设计模式(三)--行为型模式

用OC代码认识设计模式(一)--创建型模式
用OC代码认识设计模式(二)--结构型模式
用OC代码认识设计模式(三)--行为型模式
用OC代码认识六大设计原则

行为型模式

1、责任链模式(Chain of Responsibility)

定义:为请求创建了一个接收者对象的链。使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。

OC代码:请假流程,各个级别能批不同的天数,例如:组长(1-5天);超过5天就需要请示技术总监(5-10);超过10天请示总经理


责任链模式.png
2、命令模式

定义:命令模式将请求封装成对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销和恢复的操作。

OC代码:撸串流程

命令模式.png
3、中介者模式

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

OC代码:

中介者模式.png
4、观察者模式(Observer)

定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

OC代码:通知NSNotificationCenter以及KVO都是观察者模式的具体实现

5、备忘录模式(Memento)

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

OC代码:

备忘录模式.png
6、策略模式(Strategy)

定义:定义一系列的算法,把它们独立封装起来,并且使它们可相互替换。
策略模式、状态模式、简单工厂模式三者都很相似,他们的区别在于:
(1)策略模式只是在对象初始化的时候更改执行模式。代码体现:initWithObj
(2)状态模式是根据对象实例的周期时间而动态地改变对象实例的执行模式。代码体现:setObj
(3)简单工厂是创建型模式,使用type创建对象;策略模式是使用算法对象创建。代码体现:initWithType
OC代码:

三种相似的模式.png
7、访问者模式(Visitor)

定义:访问者模式封装了一些作用于某种数据结构中的各元素操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

OC代码:

访问者模式.png
8、模板方法模式(TemplateMethod)

定义: 定义一个操作中的算法的框架,而降一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

例如:
1、父类:银行业务:{1、取号,2、办业务,3、完成},
2、子类:取款、存款、贷款子类,就只需要重载“办业务”方法。

9、状态模式(State)

定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。

OC代码:

状态模式.png
10、迭代器模式(Iterator)

定义:迭代器模式提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

OC代码:在 Cocoa Touch 中的 NSEnumerator类 就实现了迭代器模式。还有基于块的枚举也是迭代器模式的实现等等

    NSEnumerator * myEnumerator = [myDic keyEnumerator];  
    for (NSObject *object in myEnumerator) {  
        NSLog(@"遍历KEY的值: %@",object);  
    }
    [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
    }];
11、解释器模式(Interpreter)

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

OC代码:实际运用如正则语法、XML、JSON

NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,563评论 25 707
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,820评论 1 15
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,609评论 4 59
  • 一杯红酒配电影,独自窝在沙发里。白天穿着十公分的高跟鞋,奔波于这钢筋水泥的魔兽森林里。轰隆的地铁不像龙猫,...
    明轼书房阅读 286评论 0 1
  • 今天英语作文发下来,嗯,A+,看到这篇满满3页纸的作文,看着题目,却完全想不起来自己什么时候写的,写的是什么内容也...
    Bella__zhang阅读 345评论 0 0