分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

js设计模式(一)---单例模式

发布时间:2023-09-06 01:08责任编辑:董明明关键词:js

之前有写过但是感觉不是很透彻---重新来过

单例模式:

  定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。  

应用场景:

  如果一个对像只需要被创建一次的时候就需要单例模式,例如:线程池、全局缓存、浏览器中的widow对象等。

实现:

  使用一个变量记录是否为某个类已经创建了对象,如果是,则在下次获取该类实例的时候。直接返回之前创建的对象。

// 单例模式var Singleton = function(name){ ???this.name = name; ???this.instance = null;};// 获取实例对象function getInstance(name) { ???if(!this.instance) { ??//一旦被实例化之后就不对其进行在实例化 ???????this.instance = new Singleton(name); ???} ???return this.instance;}// 测试单例模式的实例var a = getInstance("aa"); ????--->aavar b = getInstance("bb"); ????--->aa
console.log(a === b) ???//true

你会发现创建实例的逻辑和管理单例的逻辑放在了一起;这个不符合 “单一职责“  的原则

我们改进下 使用代理的方式使用单例模式

var Singleton = function(name) { ???this.name = name;};var getSingleton = (function() { ???var instance; ???return function(name) { ???????if (!instance) { ???????????instance = new Singleton(name); ???????} ???????return instance; ???}})();var a = new getSingleton(‘aa‘);var b = new getSingleton(‘bb‘);console.log(a === b) ?//true

 虽然做了分离但是你会发现公共部分的代码还是存在

于是还而已改进为

var Singleton = function(name) { ???this.name = name;};var getSingle = function( fn ){  var result;  return function(){    return result || ( result = fn .apply(this, arguments ) );  }};var createSingle = getSingle(Singleton)var a = createSingle(‘aa‘)var b = createSingle(‘bb‘)console.log(a == b)

如果你吧单例写到这种程度基本上也就差不多了

js设计模式(一)---单例模式

原文地址:http://www.cnblogs.com/web-Rain/p/7799671.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved