js设计模式--单体模式

单体模式

  -单体模式(singleton)是javaScript中最基本最有用的设计模式之一。

  -这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一

的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是

同样的全局资源。

  -简单单体

  -闭包单体

  -惰性单体

  -分支单体

<script type="text/javascript" charset="utf-8">
            // 单体模式(singleton)
            // 1.简单单体模式
            var Singleton = {
                
                attr1 : true,
                attr2 : 10,
                method1 : function() {
                    alert('i am method1');
                },
                method2 : function() {
                    alert('i am method2');
                }
            };
            
            // alert(Singleton.attr1);
            // 补充:划分命名空间
            var YF = {};
            YF.Singleton = {
                attr1 : true,
                attr2 : 10,
                method1 : function() {
                    alert('i am method1');
                },
                method2 : function() {
                    alert('i am method2');
                }
            };
            
            // 2.闭包单体模式
            // 闭包的主要目的:保护数据
            // 命名空间
            var YF1 = {};
            YF1.Singleton = (function(){
                // 把块级作用域里的执行结果赋值给单体对象
                // 优点,可以添加自己的私有成员,外部无法发文
                var a1 = true;
                var a2 = 10;
                var f1 = function() {
                    alert('f1');
                };
                
                var f2 = function() {
                    alert('f2');
                };
                
                return {
                    attr1 : a1,
                    attr2 : a2,
                    method1 : function() {
                        return f1();
                    },
                    method2 : function() {
                        return f2();
                    }
                };
            })();
            
            alert(YF1.Singleton.attr1);
        </script>
<script type="text/javascript" charset="utf-8">
            // 单体模式(singleton)
            // 1.惰性单体,和闭包单体有一些相似的地方
            // 顶层的命名空间
            var YF = {};
            YF.Base = (function() {
                
                // 私有变量,控制返回的单体对象
                var uniqueInstance;
                // 构造器 初始化单体对象的方法
                function init() {
                    var a1 = true;
                    var a2 = 10;
                    var f1 = function(){
                        alert('f1');
                    };
                    
                    var f2 = function(){
                        alert('f2');
                    };
                    
                    return {
                        attr1 : a1,
                        attr2 : a2,
                        method1 : function() {
                            return f1();
                        },
                        method2: function() {
                            return f2();
                        }
                    };
                }
                
                
                
                return {
                    getInstance : function(){
                        if(!uniqueInstance){
                            // 如果不存在,则创建单体实例
                            uniqueInstance = init();
                        }
                        return uniqueInstance;
                    }
                };
            })();
            
            
            
            
            // 分支单体(判断程序的分支  <浏览器的差异检测>)
            var YF1 = {};
            // 假设true为FireFox, false为IE
            var difference = true;
            YF1.More = (function(){
                // 火狐浏览器内部的一些配置
                var objA = {
                    // 属性1
                    // 属性2
                    // 方法1
                    // 方法2
                };
                // IE览器内部的一些配置
                var objB = {
                    // 属性1
                    // 属性2
                    // 方法1
                    // 方法2
                };
                
                return (difference) ? objA : objB;
            })();
            
        </script>
原文地址:https://www.cnblogs.com/yangfanasp/p/7106665.html