iOS–iOS开发中的设计模式(1)

在编写程序时使用合适的设计模式可以降低模块耦合,提高复用率,使程序有更好的可读性。在Cocoa框架中就运用了大量的设计模式。设计模式分为创建型模式,结构型模式和行为型模式三种类型。

Creational 创建型模式

关于创建型模式Wiki上是这样描述的

在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。

创建型模式由两个主导思想构成。一是将系统使用的具体类封装起来,二是隐藏这些具体类的实例创建和结合的方式。

OC中常用的创建型模式是单例模式。

Singleton 单例模式

Apple使用了大量的单例模式,例如NSUserDefaults.standardUserDefaults(), UIApplication.sharedApplication(), UIScreen.mainScreen(), NSFileManager.defaultManager()。

单例模式确保指定类只有一个实例并且提供一个访问它的全局访问点。在OC中单例模式的类通常使用懒加载创建实例。较好的创建单例是通过GCD的dispatch_once来确保类只有一个实例,dispatch_once是安全的,系统已经帮我们加了锁,所以在多个线程抢夺同一资源的时候,他也是安全的。

static id _instance;

+ (instancetype)shareInstance {
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });

    return _instance;
}

- (id)init {
//你需要初始化的属性
}

Structural 结构型模式

结构型模式借由一以贯之的方式来了解元件间的关系,以简化设计。

Decorator 装饰模式

装饰模式动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。

OC中最常用使用装饰模式的地方就是Categroy和Delegation,Categroy已经在之前写过了,而Delegateion在iOS开发中实在是太常见了,常用控件如:UITableView, UITextView, UITextField, UIWebView, UIAlert, UIActionSheet, UICollectionView, UIPickerView, UIGestureRecognizer, UIScrollView都使用了Delegation。

Adapter 适配器模式

适配器模式使几个有相互冲突接口的类工作在一起,做法是适配器容纳一个它包裹的类的实例并通过暴露一个标准接口来与对象交互。

在iOS中Apple使用了protocol来完成这项工作。常见的例子就是NSCopying protocol,通过NSCopying,任何类都能提供一个标准的copy方法。 对于NSCopying协议,不是所有的对象都支持copy,需要继承NSCopying协议,需要实现 copyWithZone:方法。同样实现NSMutableCopying协议需要实现mutableCopyWithZone: 方法才可以使用mutableCopy。