1 强制类只有一个实例 2 提供全局的访问 ###为什么使用: ``` 1 如果没有地方访问这个类,则不会创建实例 2 静态类在main之前实例化, 可以尝试Lazy initialization 3 派生单例类, 获得单例能力 ``` ###缺点: ``` 1 代码变得难懂, 上下文切换等等 2 增加了耦合度 3 并行不友好 4 惰性初始化 使你失去控制力 ``` ###思考: Many of the singleton classes I see in games are “managers” Monster, MonsterManager, Particle, ParticleManager, Sound, SoundManager, ManagerManager.... 你是否真的需要单例? ``` class Bullet{} class BulletManager { Bullet* create(){ return new Bullet(); } } 这样的话,任何一个需要bullet的地方,都需要bulletmanager, 但是真正需要几个manager? 0个! ``` ### 访问单例 1 通过继承 2 访问单例的instance 3 Service Locator 简单的说是, 定义一个类,为某个对象提供全局的访问