常见设计模式

来源:互联网 发布:用c语言写出九九乘法表 编辑:程序博客网 时间:2024/05/15 07:08

(一)MVC

模型、视图、控制器三部分组成,将程序进行逻辑层次划分。

这里写图片描述

模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。

视图对象负责搭建用户界面,并显示来自于模型的数据,并且可以将用户行为反馈给控制器对象,选择更新模型数据

在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。

例如:
1.在Model中声明来自于外部数据文件的属性,然后定义和实现字典转模型的方法,将外部文件中的字典数据转换成模型对象

2.然后在View中声明该模型对象属性,通过setter方法,将Model中的模型对象传递过来,然后根据模型对象中的数据设置view

3.在Controller中设置私有属性,接受Model传递过来的数据,然后具体设置。


(二)单例(UIApplication,NSUserDefaults是iOS常见系统单例)
确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
要点:
1.某个类只能有一个实例;
2.它必须自行创建这个实例;
3.它必须自行向整个系统提供这个实例。

重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,返回的也只是此单例类的唯一静态变量。

最好包装一个shared类方法,像[UIApplication sharedApplication]那样初始化一个单例对象,即将[XX alloc ]init]封装到sharedXXX类方法中

另外保证copy一个对象时,也不会产生新的对象实例,因此最好遵守NSCopying协议,重写copyWithZone方法,方法中直接返回对象


(三)观察者
是一种向需要观察的对象添加监听方法,当其状态发生改变时得到通知的设计模式。
定义了在一对多的情况下的方法回调方式,一般来说,观察者模式用于解除一个对象和多个对象间的耦合,分别是观察者和被观察者。被观察者与观察者间耦合程度降低,不管是有多少个监听者,都不需要改变被监听者的代码。

基本过程是:

观察者注册成为被观察者的监听者,当被观察者发生某些变化的时刻,就会触发这个监听,调用观察者中的监听方法。被观察者通常通过一个容器来存储监听者,当自身发生某些变化的时刻,就会通知这个容器中的所有监听者。

比较常见的应用和实现观察者模式的方法有“通知中心”和“KVO”

1.通知中心

 //监听键盘状态  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:)name:UIKeyboardDidShowNotification object:nil];  

如:由通知中心添加一个监听者,用于监听键盘的状态,当键盘的状态发生改变时,会通知该监听者,执行监听方法。

2.KVO
当指定的对象的属性值被修改后,则对象就会接受到通知。

[model setValue:@"name" forKey:@"name"];  [model setValue:@"10.0" forKey:@"price"];    [model addObserver:model forKeyPath:@"price" options:NSKeyValueObservingOptionNew context:nil];
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{   //change 字典中的old new 是关键字,专门用来存储新值和老值    NSLog(@"new:%@",[change objectForKey:@"new"]);}

(四)代理
委托其他类帮助自己做些操作

代理步骤:
1. 在自己类中设置一个代理协议,声明代理协议中需要实现的方法,添加代理属性
2. 在其他类中遵守代理协议,将其他类作为本类的代理,然后实现代理协议的方法,具体做哪些操作
3. 最后,在本类中判断代理类中是否实现了代理方法,如果实现了那么调用代理方法,并传递参数。


(五)工厂
定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

0 0
原创粉丝点击