您的位置:首页 > 移动开发 > IOS开发

细数iOS中的设计模式(二)

2013-08-12 22:03 253 查看
命令模式

命令模式将一个请求封装成一个对象,从而可以用不同的请求将客户端参数化,可以对请求进行排队和记录,并且支持撤销操作。请求回想会将一个或者多个行为和具体的接收者绑定在一起。命令模式将创建请求的对象和接收和执行请求的对象分离开来,以达到解耦的目的。

在Cocoa中,NSinvocation类的设计就用到了命令模式。一个NSInvocation的实例中就封装了一个Objective-C的消息。一个Invocation对象包含了目标对象、方法选择器、方法参数。你可以像修改参数一样修改被Invocation对象分发的消息的目标对象。一旦Invocation被执行了,你可以从对象中获得返回值。对一个Invocation,你可以用不同的目标对象和参数进行多次调用。

NSInvocation对象是分布式对象、撤销管理、消息转发和定时器编程接口的一部分。你也可以将它应用在需要将发送消息和接收消息解耦的情境下。

Cocoa中的target-action机制也是命令模式的一种实现。

组合模式

组合模式是将对象组合成树形结构以表示“部分整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

窗口中的视图就是一个内嵌在一个视图层次中的。这个层次的根就是窗口,窗口的内容就是视图。窗口由一个透明的视图填充着它的矩形区域。被添加到内容视图里的视图会成为内容视图的子视图,然后这些视图又会成为添加到他们中的视图的父视图。除了内容视图之外,视图只能包含一个父视图,但可以包含零或无限多个的子视图。

任何时候你添加一个视图到另一个视图的时候,你就修改或者创建了视图层次,可以是写代码也可以是使用IB。AppKit框架会自动处理视图层次的关系。

装饰模式

装饰模式可以动态向对象增加功能。装饰模式为扩展功能提供了一个子类化的灵活选择。像子类化一样,装饰模式可以在不修改已有代码的情况下增加你的功能。它通过包裹一个类的对象来实现扩展它。它实现它包裹对象同样的接口并且在调用原来对象的方法之前或者之后增加它自己的行为。装饰模式表达了设计规则里类对于扩展是开放但对于修改是关闭的。

在Cocoa中,委托和类别就是装饰模式的一种使用,不过它们都不完全符合装饰模式。但它们都是在没有继承类的情况下扩展了类的功能。委托是定义了一个接口,通过让委托类去实现从而达到扩展原类的功能的目的。类别则是直接给类添加新的方法,这些新方法具有类中原来的方法一样的特性,可以被继承。委托和代理并不完全符合装饰模式的定义,只能作为一种特别的装饰模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息