知识卡片

单例模式承载跨界面共享的唯一游戏状态

专业/工作 · 729.b

内容

一局游戏在任意时刻只应该存在一份权威状态(当前棋盘、双方玩家、走棋记录),如果这份状态挂在某个视图控制器实例上,一旦控制器因为场景切换被销毁重建,状态就会丢失或产生歧义。用单例(一个类只允许存在一个全局共享实例)来承载这类”全局唯一、生命周期不依附于任何具体界面”的状态,管理逻辑通过代理协议把结果通知给当前界面,界面本身只是这份状态的一个可替换的展示层。单例模式的适用边界很窄:只在”这个东西全局确实只应该有一份,且被多处共享读写”时才值得用,滥用单例会让状态变化难以追踪、给单元测试制造隐藏依赖,这里棋局管理类的单例是为了让棋局数据不依附控制器独立存在,而非图省事到处用全局变量。

参考来源

《Swift全解析:新式iOS实战开发》第24章《卡牌斗兽棋》