javascript编程单设计模型的解释

javascript编程单设计模型的解释
在Javascript中,单例模式是最基本和经常使用的设计模式之一,它可能不经意地用于单模式。

本文从最基本的理论入手,描述了单案例模型的基本概念和实现方法。最后,用一个例子来描述单案例模型的应用。

理论基础

概念

单例,顾名思义,就是只有一个实例存在。通过单例模式,一类系统可以保证只有一个实例,并且实例很容易被外部访问,便于控制实例的数量,节省系统资源。如果只有一个对象的类的系统中,单例模式是最佳的解决方案。

基本结构

最简单的单模式开始是对象文字,它由相关的属性和方法组织在一起。
var
道具:值
方法:函数(){
}
}
这种形式的单例模式,所有成员都是开放的,可以通过单例访问,缺点是一些辅助方法在单个情况下不想暴露给用户。如果用户使用这些方法,则在后面维护时会删除一些辅助方法,这将导致程序错误

如何避免这样的错误

包含私有成员的单模式

我们如何在课堂上创建私人成员这是通过关闭来实现的。本文没有提到闭包的知识。你可以做着自己。

基本形式如下:
var =(函数()){()
无功privatevar =私人;
返回{
道具:值
方法:函数(){
console.log(privatevar);
}
}
});
第一个是匿名函数,它是自执行的。在匿名函数,变量privatevar宣告,和一个对象被分配到单个对象单一,privatevar变量不能在匿名函数访问。它是单个实例的私有变量,只能在函数内部或通过公开的方法访问。

惰性实例化

无论是直接的文字或私有成员的单例模式,他们都挑出来当脚本被加载,但有时,网页可能无法使用单例对象,这会造成资源的浪费。在这种情况下,解决这个问题的最好办法是惰性加载,,也就是说,当我们需要它,我们真的可以实例化对象。
var =(函数()){()
函数init(){
无功privatevar =私人;
返回{
道具:值
方法:函数(){
console.log(privatevar);
}
}
}
var实例= null;
返回{
getInstance(){:功能
如果(!实例){
实例= init();
}
返回实例;
}
}
});
首先,创建init对象的代码封装在init函数中,然后声明一个私有变量实例,它代表单例对象的实例。它提供了一种方法getInstance获得对象。

电话被singleton.getinstance(),和单一的对象实际上是创建时调用getInstance。

应用

单例模式是js中最常用的设计模式,它应该尽可能地从增强模块化和代码组织的方面使用,它可以组织相关代码以便于维护。对于大型项目,每个模块都可以通过惰性加载、隐藏实现细节和公开常用API来提高性能,普通类库(如下划线、jQuery)可以理解为单模式应用程序

实战结合

正如我们前面说过的,单件模式是最常用的设计模式之一。让我们举个例子来说明。

下面的代码主要实现一个简单的日期帮助类,由单一模式实现:

基本单形结构
无功datetimehelper = { {
现在:函数(){
返回新日期();
},
格式:函数(日期){
返回date.getfullyear()+-+(date.getmonth()+ 1)+-+ date.getdate();
}
};
console.log(datetimehelper.now());

此代码通过对象的文字数量实现单个模式,并且在使用该方法时可以直接调用该模式。

延迟加载实现单模式
无功datetimehelper =(函数(){()
函数init(){
返回{
现在:函数(){
返回新日期();
},
格式:函数(日期){
返回date.getfullyear()+-+(date.getmonth()+ 1)+-+ date.getdate();
}
}
}
var实例= null;
返回{
getInstance(){:功能
如果(!实例){
实例= init();
}
返回实例;
}
}
});
console.log(datetimehelper.getinstance(),())
这是惰性负载的单一模式。

这里还有几个例子:

实现1:最简单的文字对象
var

属性:1,

方法:功能(){ return这个属性;}

}
单变量;

var =单例;

很清楚,t1 = T2。

这是非常简单和非常有用的,缺点是没有封装,所有的属性方法都暴露出来。对于一些需要使用私有变量的情况,这是不够的。当然,这个问题有一些缺点。

实现2:构造函数的内部判断

事实上,它与原始js实现有点类似,但它是将已经存在的类的判断放在构造函数中。
函数构造(){

确保只有一个案例

如果(Construct.unique!=未定义的){

Construct.unique回来了;

}

其他代码

this.name =外皮;

这个。年龄=24;

Construct.unique =这;

}
新构造();

新构造();

然后,一些,t1 = T2。

它也很简单。只不过是提出一个判断的属性,但这种方式是不安全的。一旦我修改了构造的唯一属性,就破坏了单例模式。

实施3:关闭

对于一个大型灵活的JS品牌,任何问题都可以找到N个答案,只是让我来权衡一下它的优点,这里有几种方法使用闭包来实现单模式,单例缓存无非是会创建的。
var =(函数(){())

VaR的独特;

函数构造(){

…单实例构造函数代码生成

}
独特的=新的建设();
返回独特;

});
只说var T1 =单次;var =单,OK。它类似于对象文字的类型。但它相对安全,当然不是绝对安全的。

如果您想使用调用单()模式,只需要更改内部返回到
返回函数(){

返回独特;

}
上面的方法也可以用新的形式主义(当然是波特),当然,这只是闭包的一个例子,它也可以用来判断一个案例是否存在于构造中等等。
总结

单例模式的优势在于代码封装在一个对象的组织,不会被实例化多次相关的属性和方法,使代码的维护和调试更容易隐藏实现的细节,可以防止错误的修改,和全局命名空间污染预防的。此外,它可以提高惰性加载以减少不必要的内存消耗性能。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部