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

Swift实现单例模式

2017-05-17 16:04 274 查看
设计模式一直都是老生常谈的,自己最近学习Swift,就拿设计模式来练练手吧

首先是单例模式

一、为什么要使用单例模式?

1、控制资源的使用,通过线程同步来控制资源的并发访问(我觉得这个对客户端来说,只是个理论而已)

2、控制实例产生的数量,达到节约资源的目的

3、作为通信的媒介使用,其实就是数据的共享,它可以在不建立直接关联的情况下,让多个不相关的线程之间实现通信

iOS中比较经典的单例类有:UIApplication、FileManager、NotificationCenter、URLCache、UserDefaults等等

二、实现方式

1、直接访问静态属性的方式

//第一种方式 直接访问静态属性
//final 关键字定义了该类不能被继承
final class Singleton1: NSObject {
static let shareInstance = Singleton1();

private override init() {
print("Singleton1 初始化了一次")
}
}


2、带立即执行的闭包初始化器的全局变量

final class Singleton2: NSObject {
static var shareInstance:Singleton2 = {
let instance = Singleton2();
return instance;
}();

private override init() {
print("Singleton2 初始化了一次")
}
}


3、结构体实现单例

//第三种方式:结构体实现单例
final class Singleton3: NSObject {
private class var shared : Singleton3 {
struct SharedSingleton {
static let instance = Singleton3()
}
return SharedSingleton.instance;
}

class func shareInstance() -> Singleton3 {
return shared;
}

private override init() {
print("Singleton3 初始化了一次")
}
}


4、定义私有静态变量 通过公有方法访问

//第四种方式:定义私有静态变量 通过公有方法访问
final class Singleton4: NSObject {
private static let instance = Singleton4();
class func shareInstance() -> Singleton4 {
return instance;
}

private override init() {
print("Singleton4 初始化了一次")
}
}


观察以上不难发现,所有的类中我都添加了构造方法的私有化,这样是保证其他地方不能自己init,这也是因为Swift 3.0 废弃了dispatch_xxx之后的比较简单的方式来保证单例不能实例化的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 设计模式 swift