阅读量:0
单例模式(Singleton)是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在JavaScript中,可以通过以下方式实现单例模式:,,``
javascript,class Singleton {, constructor() {, if (!Singleton.instance) {, Singleton.instance = this;, }, return Singleton.instance;, },},,const instance1 = new Singleton();,const instance2 = new Singleton();,,console.log(instance1 === instance2); // 输出 true,表示两个实例是同一个对象,
``Instance.getInstance = function () !FF属性1';
}
var obj2 = {//IE浏览器 单例模式是一种常用的对象创建型设计
JavaScript 单例/单体模式 (Singleton)
单例模式(Singleton)是确保一个类只有一个实例,并提供一个全局访问点来获取该实例的设计模式,它主要用于控制资源的共享与管理,避免资源重复创建和消耗。
单例模式分类
实现方式 | 说明 |
简单单体 | 通过直接定义一个全局变量来实现,适用于简单的场景。 |
闭包单体 | 利用闭包保护私有数据,同时提供对外的接口方法。 |
惰性单体 | 在需要时才创建实例,延迟初始化以节省资源。 |
分支单体 | 用于处理不同环境下的配置差异,如浏览器兼容性问题。 |
简单单体
var singleton = { name: 'CHX', age: 28, sayName: function() { alert('CHX'); } }; alert(singleton.name); // CHX
闭包单体
var CHX = {}; CHX.singleton = (function() { var name = 'CHX'; var age = 28; var sayName = function() { alert('CHX'); }; return { name: name, age: age, sayName: sayName }; })(); CHX.singleton.sayName(); // CHX
惰性单体
var CHX = {}; // 命名空间 CHX.Base = (function() { var uniqInstance; // 私有变量控制返回的单体对象 function init() { var name = 'CHX'; var age = 28; var sayName = function() { alert('CHX'); }; return { name: name, age: age, sayName: sayName }; } return { getInstance: function() { if (!uniqInstance) { // 实例不存在 uniqInstance = init(); } return uniqInstance; } }; })(); CHX.Base.getInstance().sayName(); // CHX
分支单体
var CHX = {}; var def = false; // 动态判断赋值 CHX.More = (function() { var obj1 = { // 火狐浏览器配置 attr1: 'FF属性1' }; var obj2 = { // IE浏览器配置 attr1: 'IE属性1' }; return (def) ? obj1 : obj2; })(); alert(CHX.More.attr1); // IE属性1
相关问题与解答
1、为什么使用单例模式?
答案:单例模式可以确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例,这有助于控制资源的共享与管理,避免资源重复创建和消耗,特别是在需要频繁访问同一资源的场景中,如数据库连接、配置文件等,单例模式还能帮助减少内存开销,提高系统性能。
2、JavaScript中的单例模式有哪些实现方式?
答案:JavaScript中的单例模式主要有以下几种实现方式:
简单单体:通过直接定义一个全局变量来实现,适用于简单的场景。
闭包单体:利用闭包保护私有数据,同时提供对外的接口方法。
惰性单体:在需要时才创建实例,延迟初始化以节省资源。
分支单体:用于处理不同环境下的配置差异,如浏览器兼容性问题。
以上就是关于“javascript 单例/单体模式(Singleton)-javascript技巧”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!