企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
创建型模式: “将对象的创建与使用分离” 单例模式:限制一个类只能有一个实例化对象。并提供一个访问他的全局访问点 经典的实现方式是,创建一个类,这个类包含一个方法,这个方法在没有对象存在的情况下,将会创建一个新的实例对象。如果对象存在,这个方法只是返回这个对象的引用。 使用闭包持久保存函数上一次的执行结果,在之后的调用中直接返回。例如js 中模块加载的方式:require、import都使用到了该模式 ```javascript var getSingle = function (fn) { // 创建单例方法 var result // 通过闭包保存创建过的对象 return function () { return result || (result = fn.apply(this, arguments)) } } var createPerson = getSingle(function (name) { return {name: name} }) var person1 = createPerson('张三') var person2 = createPerson('李四') console.log(person1, person2); // {name: '张三'} {name: '张三'} ``` # 单例模式 单例模式:保证一个类只能存在一个实例,并提供一个访问它的全局接口。 单例模式:懒汉式和饿汉式,懒汉式在调用的时候创建实例,而饿汉式则是在初始化就创建好实例 ```javascript class Single { // 懒汉式 static getInstance () { if (!Single.instance) { Single.instance = new Single(); } return Single.instance; } } class Single { // 饿汉式 static instance = new Single(); static getInstance () { return Single.instance; } } const test1 = Single.getInstance(); const test2 = Single.getInstance(); console.log(test1 === test2); // true ``` - 应用:一个单一对象。比如:vuex 和 redux中的store、弹窗,无论点击多少次,弹窗只应该被创建一次。 ```js class CreateUser { constructor(name) { this.name = name; this.getName(); } getName() { return this.name; } } let ProxyMode = (function() { // 代理实现单例模式 let instance = null; return function(name) { if(!instance) { instance = new CreateUser(name); } return instance; } })(); const a = new ProxyMode("aaa"); const b = new ProxyMode("bbb"); console.log(a === b); //true // 因为单体模式是只实例化一次,所以下面的实例是相等的 ```