IOS设计模式学习(1)设计模式初窥
1 前言
有些人可能会问,我也能实现某某功能,为什么要花时间来学习设计模式。今天我们就来了解一下设计模式的优势:
程序(包括对象和类),如果在设计中使用了设计模式,将来将更易于复用与扩展,更易于变更。而且基于设计模式的程序会更加简洁而高效,因为达到同样目的的所需代码行数会更少。
接下来就让我们一起走入神奇的设计模式的世界来体会其给我们带来便利。
2 详述
记得之前文章我们介绍了Cocoa Touch的MVC模式,而他并非最基本的设计模式,它包含了若干更加基本的设计模式:组合(Composite),命令(Command),中介者(Mediator),策略(Strategy)和观察者(Observe)。
2.1 几种常见设计模式介绍
2.1.1 组合:
视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框或按钮)。每个层次的每个视图节点都可以影响用户的操作并把自己绘制到屏幕上。
2.1.2 命令:
这是一种“目标-动作”机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些事件后再执行。
2.1.3 中介者:
控制器对象起着中间人的作用,它构成了在模型和视图对象之间传递数据的双向通道。应用程序的控制器对象将模型的变更传达给视图对象。
2.1.4 策略:
控制器是视图对象的一个“策略”,视图对象将自身隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序特有的界面行为的决定委派给它的“策略”对象(即控制器)。
2.1.5 观察者:
模型对象向它所关注的控制器等对象发出内部状态变化的通知。
2.2 协议与抽象类
2.2.1 针对接口编程
针对接口编程,而不是针对实现编程。
接口继承与类继承:
接口继承(子类型化):让我们可以用一个对象代替另一个对象。
类继承:通过复用父类的功能或者只是简单的共享代码和表述,来定义对象的实现和类型的一种机制。
定义具有相同接口的类群很重要,因为多态是基于接口的。Objective-C种有一种,确定了客户端同所用的具体类之间的一种“合约”的东西,叫做协议(protocol)。协议也是对象之间的一种合约,但是本身不能实例化伟对象。实现协议或者从抽象类继承,使得对象共享相同的接口。
通常的做法是:在客户端的代码中不声明特定具体类的变量,而只是使用协议或者抽象类定义的接口。
2.2.2 @protocol与抽象基类
协议的语法为@protocol,并不定义任何实现,而只是声明方法(method),以确定符合协议的类的行为。只定义了抽象行为的“接口”。实现协议的类定义这些方法的实现,以执行真正的操作。
另一种定义高度抽象类型的方法是定义抽象基类(Abstract Base Class,ABC)。通过抽象基类,我们可以生成一些其他自雷可以共享的默认行为。
协议中可以用@optional指令(directive)将协议部分方法变更为“可选的”。
如果客户端要使用由协议所定义类型的对象,比如有个协议叫Mark,则需要使用:
id<Mark>thisMark;
如果Mark被声明为抽象基类,那么语法应该分其他类一样:
Mark* thisMark;
Objective-C不支持多重继承,所以要用协议来进行扩展。
优先使用协议而不是类继承。
3 结语
作为开篇文章,我不想做太多的赘述,就先介绍这么多剩下的我们慢慢来研究,希望对大家有所帮助。