MST

星途 面试题库

面试题:JavaScript 静态方法与属性的设计模式应用

假设你正在开发一个游戏框架,其中有一个 `SceneManager` 类。要求使用静态方法和属性设计一种单例模式来管理游戏场景,确保整个游戏中只有一个 `SceneManager` 实例,并且该实例可以通过静态方法获取。同时要考虑如何在不同模块间共享这个单例实例,描述你的设计思路及具体实现代码。
12.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 静态属性:在 SceneManager 类中定义一个静态属性来存储单例实例,确保在整个游戏运行期间该实例唯一。
  2. 静态方法:提供一个静态方法用于获取单例实例,如果实例不存在则创建它,若已存在则直接返回。
  3. 不同模块共享:由于是通过静态方法获取实例,任何模块只要能访问到 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,说明是同一个实例