游戏设计模式学习笔记(5)单例模式
参考:
《设计模式与游戏完美开发》
《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN)
《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns)
【游戏设计模式】浅墨_毛星云: https://blog.csdn.net/poem_qianmo/article/details/53240330
定义
-
保证一个类只有一个实例,并且提供了访问该实例的全局访问点。
- 只能有一个实例
- 必须自行创建这个实例
- 必须自行向整个系统提供这个实例
-
性质
- 如果没人用,就不必创建实例。
- 它在运行时实例化。
- 可继承单例。(文件系统,子类为根据不同平台的文件系统,PC端、安卓端的文件系统)
public class Singleton
{
private static Singleton _instance;
public static Singleton Instance
{
get
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
// 设为私有,不给外部初始化
private Singleton() {}
}
优缺点
- 优点
- 提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它,并为设计及开发团队提供了共享的概念。
- 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
- 允许可变数目的实例。我们可以基于单例模式进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例。
- 缺点
- 违反“开闭原则”,外部获取的是实现类,要改需求只能改类。
- 单例类的职责过重,在一定程度上违背了“单一职责原则”。因为单例类既充当了工厂角色,提供了工厂方法,同时又充当了产品角色,包含一些业务方法,将产品的创建和产品的本身的功能融合到一起。
- 对并行不友好,带来死锁。
应用场景
- 游戏主循环类。