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>
时间: 2024-12-17 16:41:22

js设计模式--单体模式的相关文章

如何做JS 单体模式的设计----&gt;&gt;js设计模式&lt;&lt;-------单体模式

1. 单体模式是js中最基本 单最有用的模式之一,非常常用. 单体模式的基本结构如下: var Person = { name: 'lilu', age:'20', sayHi: function(){ alert('456456'); }, sayBye: function(){ alert('456456'); } } 这个栗子中,所有的成员都可以通过Person进行访问,用点运算符就行. 如: Person.name = "zczc"; Person.age = "10

JS设计模式—单体模式(即时加载/惰性加载)

单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对象语言虽然在单体模式的思想上是一致的,但是实现起来还是有差异的. 首先来看看传统面向对象语言对于单体模式的定义:单体模式是只能被实例化一次并且可以通过一个众所周知的访问点来访问的类.这个定义有两点突出了传统面向对象语言的特征,即类和实例化,所以对于传统面向对象语言来讲,单体模式是建立在其类和实例化的

5分钟读书笔记之 - 设计模式 - 单体模式

单体是一个用来划分命名空间,并将一批相关方法和属性组织在一起的对象,如果它可以被实例化,那么它只能被实例化一次. 单体模式,就是将代码组织为一个逻辑单元,这个逻辑单元中的代码可以通过单一的变量进行访问. 单体基本结构是这样: var Singleton = { attribute1:true, attribute2:10, method1:function(){}, method2:function(){} } 借助闭包实现单体: Namespace.Singleton = {} 定义之后立即执

js设计模式——桥接模式

定义:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化. 常用场景:在js中,桥接模式常用于事件监听器和ajax请求的解耦,以便于进行单元测试. 举个栗子 普通方法. var btn=$('#btn'); btn.on('click',function () { $.ajax({ url:'test.html', data:{ id:this.id }, dataType:'html', success:function(data){ con

JavaScript设计模式——单体模式

一:单体模式简介: 是什么:将代码组织为一个逻辑单元,这个单元中的代码通过单一的变量进行访问.只要单体对象存在一份实例,就可以确信自己的所有代码使用的是同样的全局资源. 用途:1.用来划分命名空间,减少网页中全局变量的数目. 2.在分支技术中用来封装浏览器之间的差异. 3.单体对象创建的命名空间可以快速清除全局变量. 4.增强模块性 关于单体模式的好坏,等你看完所有的讲解之后再告诉你哦....... 二:单体结构: 1.最简单的单体就是一个对象字面量. 1 var ProductTools={

JS设计模式——工厂模式详解

工厂模式是另外一种关注对象创建概念的创建模式.它的领域中同其它模式的不同之处在于它并没有明确要求我们使用一个构造器.取而代之,一个工厂能提供一个创建对象的公共接口,我们可以在其中指定我们希望被创建的工厂对象的类型. 简单工厂模式:使用一个类(通常为单体)来生成实例 复杂工厂模式:使用子类来决定一个变量成员应该为哪个具体的类的实例. 简单工厂模式 var BicycleShop = function () { }; BicycleShop.prototype = { sellBicycle: fu

js设计模式-命令模式

命令模式是一种组织型模式,主要用在把调用对象(用户界面.API和代理等)与实现操作的对象隔离开.也就是说 ,凡是两个对象间的互动方式需要更高的模块化程度时都可以用到这种模式. 命令模式的好处:1.提高程序的模块化程度和灵活性.(运用得当):2.实现取消和状态恢复等复杂的有用特性非常容易. 例子:菜单组合对象 1 /** 2 * 菜单组合对象 3 */ 4 5 /*command,Composite and MenuObject interfaces*/ 6 var Command = new I

js设计模式-桥接模式

桥接模式定义:桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化".这句话有三个关键词,也就是抽象化.实现化和脱耦. 最简单的桥接模式例子:事件监听器 addEvent(element,"click",getResultByIdBridge); function getResultByIdBridge(e){ getById(this.id, function(result){ //TODO: t

js设计模式-组合模式

组合模式是一种专为创建web上的动态用户界面而量身定制的模式.使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象. 组合模式实例:图片库 1 /** 2 * 图片库 3 */ 4 var Composite = new Interface("Composite",["add","remove","getChild"]); 5 var Galle