这一篇给大家带来的是我们开发中最常用也最简单的单利模式
定义
单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。
适用性
如果程序中的某个类对于所有客户端只有一个可用的实例,即可以使用单例模式。
如果你需要更加严格地控制全局变量,可以使用单例模式。
问题
单例模式同时解决了两个问题, 所以违反了单一职责原则
:
保证一个类只有一个实例。 那么为什么人们会有这样的想法? 原因很简单,就是控制某些共享资源 (音乐播放器) 的访问权限。
优点
-
你可以保证一个类只有一个实例。
-
你获得了一个指向该实例的全局访问节点。
-
仅在首次请求单例对象时对其进行初始化。
缺点
-
违反了单一职责原则。该模式同时解决了两个问题。
-
单例模式可能掩盖不良设计,比如程序各组件之间相互了解过多等。
-
该模式在多线程环境下需要进行特殊处理,避免多个线程多次创建单例对象。
伪代码(Swift版)
class Singleton {
/// 创建单利实例,每个子类只有一个实例
static var shared: Singleton = {
let instance = Singleton()
// ... 配置一些参数...
return instance
}()
private init() {}
///做你的操作即可
func aStringMethod() -> String {
return "字符串"
}
func bIntMethod() -> Int{
return 0
}
// ...
}
extension Singleton: NSCopying {
func copy(with zone: NSZone? = nil) -> Any {
return self
}
}
///测试用例
class Client {
static func testClientCode(){
let instance1 = Singleton.shared
let instance2 = Singleton.shared
print(Unmanaged.passUnretained(instance1).toOpaque())
///打印对象内存地址结果: 0x0000000280424100
print(Unmanaged.passUnretained(instance2).toOpaque())
///打印对象内存地址结果: 0x0000000280424100
}
}
不管我们遇到什么困难,也不要怕,微笑着面对它,消除恐惧的最好办法就是面对恐惧,坚持,才是胜利,加油,奥利给!!