关于前阵子学习ios MVC设计模式的小结
2012-10-19 22:45
239 查看
MVC模式是 Cocoa(Touch)的核心,其包含了一些基本的设计模式. 设计模式主要是运用面向对象特性编程的一些总结性的经验. Cocoa MVC 模式包括 适配器模式(委托Delegate就是适配器模式).组合模式,命令模式,中介者模式,策略模式,观察者模式.时间有限先只小结比较熟的三个模式,并讲一下在Cocoa中的示例,你会发现很多Cocoa类库遵照了很多之类的模式
1.组合模式是使用接口(协议)的优秀例子,它使对象和对象的组合能被一致性看待.类图如下
Cocoa中UIView就是使用组合模式的例子,在一个手机应用上,手机屏幕上满是UIView视图或其派生类,它们是可以互相包含的,每一个视图或其视图的子类都可以有0到多个子视图.所有的这些视图,都是UIView(这是多态了),不管是派生成UISlider(滑块)还是UILabel(文本标签)还是UITextField(文本输入框)
都能按祖宗的类型UIView进行统一处理. 其中一个特性是参与到统一的响应者链(一致对待).
2.中介者模式,上类图
只看类图是难懂的,说明一下同事类,所谓同事类是一群相互引用的乱成一团麻的类,比如Controller们互相引用来进行视图切换控制的流程,如下
经过中介者模式处理,就变成下面这样子了:
是不是很清晰? 中介者引用了所有的同事类,负责它们的交互.自己不具有其它功能,仅仅负责那团乱麻,这就是面向对象的万物皆对象的封装,也就是说我们把所有同事类间的视图切换(或是其它的交互主题)的代码封装到一个类中,这个类叫中介者.它本身可能是一个庞大的switch-case结构块,这让它成为庞然大物,尽管如此,也比散乱在各处类中的交互代码好多了!
3观察者模式,上类图
观察者模式是一种发布-订阅模式,看类图就知道,是两个抽象类或接口之间的相互引用.其中一个接口当发布者,它的每个实现ConcreteSubject都代表一个主题,每个主题ConcreteSubject拥有一个观察者队列,所有观察者ConcreteObserver都是实现观察者接口的人,它们自己接收到主题通知后,自己有不同的实现方式.这不影响主题实现类向它们发送通知.只要有主题通知(一般通知Notification是一个类),ConcreteSubject把队列里的对象统统调用update方法,可能需要传一下Notification作为参数,就算通知完了,这是面向接口编程的好处.
在Cocoa中,NSNotificationCenter就是一个主题队列维护者,任何对象都可以在这里用参数定制相关主题,然后NSNotificationCenter在有情况就生成一个通知NSNotification(通知自己识别了主题),然后postNotification就完事了.
关于KVO,键值观察也是这个模式的示例,想了解的去看苹果的API,这里不赘述了.
1.组合模式是使用接口(协议)的优秀例子,它使对象和对象的组合能被一致性看待.类图如下
Cocoa中UIView就是使用组合模式的例子,在一个手机应用上,手机屏幕上满是UIView视图或其派生类,它们是可以互相包含的,每一个视图或其视图的子类都可以有0到多个子视图.所有的这些视图,都是UIView(这是多态了),不管是派生成UISlider(滑块)还是UILabel(文本标签)还是UITextField(文本输入框)
都能按祖宗的类型UIView进行统一处理. 其中一个特性是参与到统一的响应者链(一致对待).
2.中介者模式,上类图
只看类图是难懂的,说明一下同事类,所谓同事类是一群相互引用的乱成一团麻的类,比如Controller们互相引用来进行视图切换控制的流程,如下
经过中介者模式处理,就变成下面这样子了:
是不是很清晰? 中介者引用了所有的同事类,负责它们的交互.自己不具有其它功能,仅仅负责那团乱麻,这就是面向对象的万物皆对象的封装,也就是说我们把所有同事类间的视图切换(或是其它的交互主题)的代码封装到一个类中,这个类叫中介者.它本身可能是一个庞大的switch-case结构块,这让它成为庞然大物,尽管如此,也比散乱在各处类中的交互代码好多了!
3观察者模式,上类图
观察者模式是一种发布-订阅模式,看类图就知道,是两个抽象类或接口之间的相互引用.其中一个接口当发布者,它的每个实现ConcreteSubject都代表一个主题,每个主题ConcreteSubject拥有一个观察者队列,所有观察者ConcreteObserver都是实现观察者接口的人,它们自己接收到主题通知后,自己有不同的实现方式.这不影响主题实现类向它们发送通知.只要有主题通知(一般通知Notification是一个类),ConcreteSubject把队列里的对象统统调用update方法,可能需要传一下Notification作为参数,就算通知完了,这是面向接口编程的好处.
在Cocoa中,NSNotificationCenter就是一个主题队列维护者,任何对象都可以在这里用参数定制相关主题,然后NSNotificationCenter在有情况就生成一个通知NSNotification(通知自己识别了主题),然后postNotification就完事了.
关于KVO,键值观察也是这个模式的示例,想了解的去看苹果的API,这里不赘述了.
相关文章推荐
- 学习ios MVC设计模式的小结
- 【IOS学习之路】关于DES加密 神州付中使用到的DES加密方式
- [iOS进阶]AFNetworking 学习小结
- iOS开发中关于nslog的几种流行做法小结
- 关于copy_to_user和copy_from_user的学习小结
- iOS日常学习 - iOS10上关于NSPhotoLibraryUsageDescription等问题
- 关于iOS 照片流的学习
- ios学习之 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- HTTP学习小结1 - 关于URI,URL和URN的说明
- 关于iOS中图片处理的小结
- iOS开发小结 - AFNetworking的Post失败,关于requestSerializer的正确使用
- ios学习之 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- ios 学习总结day01关于UIview和IBAction 常见错误
- [转载]知乎上一篇关于怎样面试IOS工程师的回答,用于面试和学习都不错
- 关于Handler学习的一些自我小结
- iOS学习之关于#import导入补全问题
- iOS学习笔记4 --关于xcode 5.1 x86 - 64 编译问题
- 关于构造函数的小结(学习中)
- 【IOS学习之常见问题】 关于IOS证书的那点折腾事2-百科证书
- 关于后盾网yii框架的学习小结(6)--数据库连接配置与模型定义与后台登陆验