iOS 之设计模式
MVC
模型-视图-控制器模式,是iOS程序的主要构架。
-
M
模型部分定义应用程序的数据引擎,负责维护数据的完整性 -
V
视图部分定义应用程序的用户界面,显示数据。 -
C
控制器部分则充当模型和控制器的桥梁,帮助实现数据
和显示
的更新。
Delegate
委托模式,这个设计模式有助于一个对象的数据传输到另一个对象。
委托模式可以对复杂对象进行修改而不需要子类化。
与子类化不同的是,您可以照常使用复杂对象,而将对其行为进行修改的定制代码放在另一个对象中,这个对象就称为
委托对象
。复杂对象需要在预先定义好的时间上调用委托对象的方法,使其有机会运行定制代码。
Target-Action
控件通过目标—动作模式
将用户的交互通知给您的应用程序.
当用户以预先定义好的方式(比如轻点一个按键)进行交互时,控件就会将消息(动作)发送给您指定的对象(目标)。
接收到动作消息后,目标对象就会以恰当的方式进行响应。
Protocol
-
正式 Protocol:
对objc语言的扩展。通过interface声明,可以强制实现或者可选实现。
-
非正式 Protocol:
NSObject的一个category,category是objc语言的一个特性,可以让你为一个类增加方法而不需要实现子类。非正式protocol实现方法是可选的。
观察者模式
Notification
即一个通知,是一个消息,是用于通知一到多个
观察者对象程序当前有一个事件发生。
接收通知的一方叫观察者,observer。实际上是观察者模式。
发送通知的对象,并不知道谁会收到这个通知。这样通知者和观察者之间松散耦合。
KVO
允许对象观察另一个对象的属性。
该属性值改变时,会通知观察对象。
它了解新值以及旧值;如果观察的属性为对多的关系(例如数组),它也要了解哪个包含的对象发生了改变。
KVO 有助于使应用程序变得更内聚,保持MVC中的对象与改变同步。
单例模式
单例设计模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。
苹果大量使用了此模式。例如:[NSUserDefaults standardUserDefaults],[UIApplication sharedApplication],[UIScreen mainScreen],[NSFileManager defaultManager],所有的这些方法都返回一个单例对象。
一个优点:实现线程安全的方式访问共享实例是容易的,比如一个配置文件,有好多个类同时修改这个文件.
外观模式 Facade
外观模式针对复杂的子系统提供了单一的接口,不需要暴露一些列的类和API给用户,你仅仅公开一个简单统一的API。(例如 Helper 类、Manager 类)
这个API的使用者完全不需要关心背后的复杂性。这个模式非常适合有一大堆很难使用或者理解的类的情况。外观模式解耦了使用系统的代码和需要隐藏的接口和实现类。它也降低了外部代码对内部子系统的依赖性。当隐藏在外观之后的类很容易发生变化的时候,此模式就很有用了,因为当背后的类发生变化的时候,外观类始终保持了同样的API。
装饰器模式 Decorator
装饰器模式在不修改原来代码的情况下动态的给对象增加新的行为和职责,它通过一个对象包装被装饰对象的方法来修改类的行为,这种方法可以做为子类化的一种替代方法
。
OC 实现方式:Category(类别)和 Delegation(委托)
-
Category(类别)
- Category(类别)是一种不需要子类化就可以让你能动态的给已经存在的类增加方法的强有力的机制。
- 新增的方法是在编译期增加的,这些方法执行的时候和被扩展的类的其它方法是一样的。它可能与装饰器设计模式的定义稍微有点不同,因为Category(类别)不会保存被扩展类的引用。
-
Delegation(委托)
- 委托作为另外一个装饰器模式,它是一种和其它对象交互的机制。
- 见上文
适配器(Adapter)模式
适配器可以让一些接口不兼容的类一起工作。它包装一个对象然后暴漏一个标准的交互接口。
备忘录(Memento)模式
备忘录模式:快照对象的内部状态并将其保存到外部。
换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的。