最近开始关注程序的设计模式,阅读一些专业资料有点困难,不过目前对iOS开发常用的4种模式了解较多:MVC模式,单例模式,观察者模式,委托模式。这都是iOS工程师必须了解的4种模式。后来看到一篇文章,对iOS中的设计模式讲的更多,与大家分享一下。
1.MVC模式
2.单例模式(Singleton)
3.外观模式(Facade)
通过一个工具类来封装其他功能(网络请求,播放音乐等)的接口,而把具体的实现部分隐藏起来。
通过添加私有属性。
提示:当你在你的子系统里设计一个外观类的时候,记住没有任何恭喜可能阻止客户访问这些[隐藏]类。要多写些防御性的代码,不要想当然的认为所有客户都会使用同样的方式使用你的外观类。或许封装成静态库是个不错的选择。
4.装饰器模式(Decorator)
装饰器模式可以在不修改代码的情况下灵活的为一对象添加职责和行为。当你要修改一个被其他类包含的类的行为时,它可以代替子类化方法。
在Object-C里有两种非常常见的实现模式:分类(Category)和委托(Delegation),实质上是类的扩展和委托模式。
分类 Category
分类是一种非常强大的机制,它允许你在一个已存在的类里添加新方法,而不需要去为它添加一个子类。比如对一个model,你想要显示它或者获得一个与它相关的字典对象时,可以在它的扩展类里添加对应的方法。重要的是它绝不会修改原来的类。
委托模式
将你需要的内容交给别的类去实现,非常常见的方法。
5.适配器模式Adapter
一个适配器允许接口不兼容的类在一起工作,它把自己包裹成一个对象,公开一个与这个对象相互作用的标准接口。
苹果习惯使用协议(protocols)。
这个模式非常好用,比如你可以为实现水平滚动的TableView定义一个类。
6.观察者模式Observer
在观察者模式中,当状态发生改变的时候,一个对象会通知另一个对象。这个对象不需要知道另一个对象发生了什么改变-因此非常鼓励这种分离式的设计。这种模式经常用于,当一个属性发生改变时通知跟他相关的对象。
Cocoa有两个常用的方法来执行观察者模式:Notifications(通知)和Key-Vlaue Observing(键值观察)。
使用通知Notifications
不管任何时候,在你执行downloadImage:之前,一定要记住在你释放这个类的时候取消这个通知的订阅。如果你不正确的取消一个通知的订阅,这个通知可能发送一个已经释放的实例。这会造成你的程序崩溃。
在dealloc方法中移除观察者。
键值观察(KVO)
在KVO里,一个对象的任何一个特别的属性改变后都可以请求一个通知;不管是它自己的还是其他的对象。该方法的弊端是只能在同一个类中使用。
7.备忘录模式Memento
备忘录模式是捕获和具体化当前对象的内部状态.换句话说,就是在某个地方存储某个东西,稍后,在不违反封装的情况下能够恢复这个具体化的状态;就是说一些私有数据被私下存储下来了。
注:你不能在每一个类的实例里存储私有变量,因为它们是不可访问的外部类。这就是苹果为什么要创建归档(Archiving)机制。
8.归档模式Archiving
备忘录模式就是苹果中一种归档形式。它能够把对象转化成一种数据流,在不依赖于外部类的私有属性的情况下来存储和取出数据。
有机会专门研究一下。
9.命令模式Command
命令模式封装一个请求或行为作为一个对象。封装的请求比原有的更加灵活,可以在对象之间传递,储存,动态修改,或放入一个队列。苹果的Target-Action调用机制已经实现了命令模式。
比较深入的关于命令的代码,值得一看。
转载地址:http://www.superqq.com/blog/2015/06/10/ios-she-ji-mo-shi-xi-lie-:kai-pian/