家里用的路由器管理页面,你有没有想过为啥每次打开都是同一个设置界面,而不是弹出一堆窗口?其实这背后就藏着一种叫“单例模式”的编程技巧。它保证一个类只创建一个实例,避免重复占用资源,就像你家的主路由器,只需要一台就够了。
什么是单例模式
简单说,单例模式就是让某个类在整个程序运行期间,只能被实例化一次。不管你在多少个地方调用它,拿到的都是同一个对象。这种设计在配置管理、日志记录、设备控制这些场景里特别常见。
怎么写一个基本的单例
拿 JavaScript 来说,最简单的写法是用一个变量标记是否已经创建过实例:
var RouterManager = (function() {
var instance = null;
function createInstance() {
return {
settings: {},
save: function() {
console.log("保存路由器设置");
}
};
}
return {
getInstance: function() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
// 使用方式
var manager1 = RouterManager.getInstance();
var manager2 = RouterManager.getInstance();
console.log(manager1 === manager2); // true,是同一个对象
Python 里的单例写法
在家庭自动化脚本中,如果你用 Python 控制智能灯,也可以用单例防止多次连接设备:
class LightController:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.power = False
return cls._instance
# 测试
light1 = LightController()
light2 = LightController()
print(light1 is light2) # True
为什么家庭网络设备适合用单例
想象一下,你家的 Wi-Fi 设置如果能被多个程序同时修改,那岂不是乱套了?通过单例模式,所有操作都走同一个管理实例,确保配置统一、状态同步。比如手机 App 和网页端改密码,实际操作的都是同一个核心对象,不会冲突。
这种模式不光省资源,还能避免数据不一致的问题。就像你家的主控开关,只能有一个才安全。