前言

“This chapter is an anmoaly.Every other chapter in this book shows you how to use a design pattern.this chapter shows you how not to use one”. Game Programming Patterns
单例模式应该是接触Unity开始第一个设计模式了,各种Manager里面的Instance。Manager of Manager
但是这样的设计有着很大的坏处。

什么是单例模式

定义:“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
主要解决:一个全局使用的类频繁地创建与销毁。
应用实例:

  • 地球上只有一个太阳,一个班级只有一个班主任。
  • Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。

游戏开发中的单例模式 - 图1

如何构造

一般来说,用公用属性Instance构造单例。
关键代码:构造函数是私有的。有了这个声明就可以确保该类只能产生一个对象,因为建造者是私有成员无法调用。

单例模式的缺点

  • 理解代码更加困难
  • 促进了耦合的发生
  • 对并行并不友好

由定义可知单例模式是无法继承的,所以扩展性降低。

单例模式伪”继承“

每个子类都实现单例模式,再由父类的Instance去获取这些子类。

少用单例模式下如何方便引用单一对象

1.让类具有计数功能来限制对象
在类中加入计数器字段,构造中计数器加1,使用功能是判断计数器是否为1。
2.定义虚函数
3.使用静态函数