zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    silverlight重写TextBox PassWordBox
    android使用html开发
    SilverLight中DataGrid显示值转换
    STM32 GPIO 的配置与使用
    开始。。
    VCS使用指令
    【转】关闭 Windows 7中的 6to4 隧道
    DC中关于list、双引号和花括号的使用区别
    解决了microblaze在ISE中例化时自动插入IO buffer
    Recovery time 和 Removal time的概念
  • 原文地址:https://www.cnblogs.com/yangfanasp/p/7106665.html
Copyright © 2011-2022 走看看