1. revealing module 揭示模式
该模式能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象, 它拥有指向私有函数的指针,该函数是他希望展示为公有的方法。
示例:
<script> 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"); </script>
优点:
- 该模式很容易之处哪些函数和变量可被公开访问,改善了可读性。
- 如果一个私有函数引用一个公有函数,在需要打补丁时,公有函数是不能被覆盖的。 因为私有函数将继续引用私有实现,该模式并不适用于公有成员,只使用函数。
2. singleton 单例模式
单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下, 可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;
示例:
<script type="text/javascript"> 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 </script>
在实践中,当在系统中确实需要一个对象来协调其他对象时,>singleton模式很有用。
示例:
<script type="text/javascript"> 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 </script>
以上就是解析javascript设计模式revealing module 揭示模式单例模式的详细内容,更多关于js 揭示模式单例模式的资料请关注其它相关文章!