知识卡片

单例模式的数据共享语义

专业/工作 · 640.a

内容

单例模式保证某个类在整个应用运行期间只会被实例化一次,做法是把构造方法私有化、只通过 一个静态属性对外暴露唯一实例。它的价值不只是”省内存少创建对象”,更关键的是让这个实例 持有的数据在应用的任意界面之间天然保持一致:比如背景音乐的开关状态存在一个单例的音频 引擎里,用户在 A 界面关闭音效后切换到 B 界面,读到的仍是同一份”已关闭”的状态,不需要 额外的跨界面同步代码。发散:单例本质上是拿全局可访问性换取跨模块的状态一致性,代价是 这份全局状态会被程序里任何知道这个类的地方悄悄修改,调用方越多,追踪”这个状态是谁在 什么时候改的”就越困难——这也是单例常被认为是把便利和可测试性、可追溯性做交换的模式。

参考来源

《Swift 4从零到精通iOS开发》第20章《实战三:《中国象棋》游戏》