关于前阵子学习ios MVC设计模式的小结

来源:互联网 发布:高分三号 预处理 软件 编辑:程序博客网 时间:2024/04/28 06:52

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,这里不赘述了.

原创粉丝点击