设计思路
- 静态属性:在
SceneManager
类中定义一个静态属性来存储单例实例,确保在整个游戏运行期间该实例唯一。
- 静态方法:提供一个静态方法用于获取单例实例,如果实例不存在则创建它,若已存在则直接返回。
- 不同模块共享:由于是通过静态方法获取实例,任何模块只要能访问到
SceneManager
类,就可以获取到同一个单例实例,从而实现共享。
具体实现代码(以Python为例)
class SceneManager:
_instance = None
@staticmethod
def get_instance():
if SceneManager._instance is None:
SceneManager._instance = SceneManager()
return SceneManager._instance
使用示例
# 在不同模块中获取单例实例
scene_manager1 = SceneManager.get_instance()
scene_manager2 = SceneManager.get_instance()
print(scene_manager1 is scene_manager2) # 输出True,说明是同一个实例
Java 实现
public class SceneManager {
private static SceneManager instance;
private SceneManager() {
// 私有构造函数,防止外部实例化
}
public static SceneManager getInstance() {
if (instance == null) {
instance = new SceneManager();
}
return instance;
}
}
Java 使用示例
// 在不同模块中获取单例实例
SceneManager sceneManager1 = SceneManager.getInstance();
SceneManager sceneManager2 = SceneManager.getInstance();
System.out.println(sceneManager1 == sceneManager2); // 输出true,说明是同一个实例
C# 实现
public class SceneManager
{
private static SceneManager instance;
private SceneManager()
{
// 私有构造函数,防止外部实例化
}
public static SceneManager GetInstance()
{
if (instance == null)
{
instance = new SceneManager();
}
return instance;
}
}
C# 使用示例
// 在不同模块中获取单例实例
SceneManager sceneManager1 = SceneManager.GetInstance();
SceneManager sceneManager2 = SceneManager.GetInstance();
Console.WriteLine(Object.ReferenceEquals(sceneManager1, sceneManager2)); // 输出True,说明是同一个实例