深入解析设计模式中的装饰器模式在iOS应用开发中的实现

2020-01-15 13:22:37王冬梅

2.委托 Delegation

另外一种装饰器的设计模式是,委托 (Delegation),它是一种机制,一个对象代表另外一个对象或者其相互合作。例子,当你使用 UITableView 的时候,其中一个方法是你必需要执行的,tableView:numberOfRowsInSection:。

你可能并不期望 UITableView 知道每个 section 中有多少行,这是程序的特性。因此,计算每个 section 有多少行的工作就交给了 UITableView 的委托 (delegate)。它允许 UITableView 类不依赖它显示的数据。

当你创建了一个新的 UITableView 的时候,这里有一个类似的解释:

设计模式,装饰器模式,iOS应用开发

UITableView 对象的工作就是显示一个表单视图。然而,最终它都需要一些它信息,它并不拥有这些信息。然后,它会转向它的委托,发送一个添加信息的消息。在 Object-C 中实现委托模式,一个类可以通过协议 (protocol) 来声明一个可选和必选的方法。稍后,在这个教程你将覆盖一个协议 (protocols)。

它看起来比子类更容易,覆盖需要的方法,但是考虑如果是单类的话你只能创建子类。如果你想一个对象委托两个或者多个对象的时候,子类化的方法是不能实现的。

提示:这是一个很重要的模式。苹果在 UIKit 类中大量的使用了此方法:UITableView, UITextView, UITextField, UIWebView, UIAlert, UIActionSheet, UICollectionView, UIPickerView, UIGestureRecognizer, UIScrollView。这个列表还可以有很多。
如何使用委托模式:

打开 ViewController.m,在顶部引入如下文件

 

复制代码

 

#import "LibraryAPI.h"
#import "Album+TableRepresentation.h"

 



现在,在类的扩展里的添加一些私有变量,它们看起来如下:
复制代码
@interface ViewController (){
    UITableView *dataTable;
    NSArray *allAlbums;
    NSDictionary *currentAlbumData;