共计 2159 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 这篇文章主要为大家解析了 Javascript 设计模式 Revealing Module 揭示模式及 Singleton 单例模式示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 |
1. Revealing Module 揭示模式
该模式能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,该函数是他希望展示为公有的方法。
示例:
var myRevealingModule = function () { | |
var privateVar = "Ren Cherry", | |
publicVar = "Hey there"; | |
function privateFunction() {console.log("Name:"+privateVar); | |
} | |
function publicSetName(strName) {privateName = strName;} | |
function publicGetName() {privateFunction(); | |
} | |
// 将暴露的公有指针指向到私有函数和属性上 | |
return { | |
setName: publicSetName, | |
greeting: publicvar, | |
getName: publicGetName | |
}; | |
}(); | |
myRevealingModule.setName("Paul Kinlan"); |
优点:
2. Singleton 单例模式
单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;
示例:
var mySingleton = (function () { | |
// 实例保持了 singleton 的一个引用 | |
var instance; | |
function init() { | |
//singleton | |
// 私有方法和变量 | |
function privateMethod() {console.log("I am private"); | |
} | |
var privateVariable = "I am also private"; | |
var privateRandomNumber = Math.random(); | |
return { | |
// 公有方法和变量 | |
publicMethod: function () {console.log("The public can see me!"); | |
}, | |
publicProperty: "I am also public", | |
getRandomNumber: function() {return privateRandomNumber;} | |
}; | |
}; | |
return { | |
// 获取 singleton 的实例,如果存在就返回,不存在就创建新实例 | |
getInstance: function() {if(!instance) {instance = init(); | |
} | |
return instance; | |
} | |
}; | |
})(); | |
var singleA = mySingleton.getInstance(); | |
var singleB = mySingleton.getInstance(); | |
console.log(singleA.getRandomNumber()===singleB.getRandomNumber());//true |
在实践中,当在系统中确实需要一个对象来协调其他对象时,>Singleton 模式很有用。
示例:
var SingletonTester = (function() { | |
//options: 包含 singleton 所需配置信息的对象 | |
//var options = {name:"test",pointX:5}; | |
function Singleton(options) { | |
// 如果未提供 options, 则设置为空对象 | |
options = options || {}; | |
// 为 singleton 设置一些属性 | |
this.name = "SingletonTester"; | |
this.pointX = options.pointX || 6; | |
this.pointY = options.pointY || 10; | |
} | |
// 实例持有者 | |
var instance; | |
// 静态变量和方法的模拟 | |
var _static = { | |
name: "SingletonTester", | |
// 获取实例的方法,返回 singleton 对象的 singleton 实例 | |
getInstance: function(options) {if(instance === undefined) {instance = new Singleton(options); | |
} | |
return instance; | |
}; | |
return _static; | |
} | |
})(); | |
var singletonTest = SingletonTester.getInstance({pointX: 5}); | |
console.log(singletonTest.pointX);//5 |
以上就是解析 Javascript 设计模式 Revealing Module 揭示模式单例模式的详细内容
正文完
星哥玩云-微信公众号
