js21---单体(单例)模式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
            /* 单体
            简单单体
            闭包单体
            惰性单体
            分支单体 */

            // 1 简单单体模式(单例模式),不能new了,用于全局资源,公共数据。
            var Singleton = {
                attr1: true ,
                attr2: 10 ,
                method1 : function(){
                    alert(‘我是方法1‘);
                },
                method2 : function(){
                    alert(‘我是方法2‘);
                }
            };
            alert(Singleton.attr1);

            // 补充 :划分命名空间 (区分代码),大对象.小对象, Ext.Manager.attr1 / method1
            var BHX = {};
            BHX.Singleton = {//json里面不用this和var,
                attr1: true ,
                attr2: 10 ,
                method1 : function(){
                    alert(‘我是方法1‘);
                },
                method2 : function(){
                    alert(‘我是方法2‘);
                }
            };
            BHX.Singleton.method1();

            // 2 上面Singleton里面的属性还是可以更改。借用闭包保护数据
            var BHX = {} ;
            BHX.Singleton = (function(){//(function(){})()
                // 添加自己的私有成员
                var a1 = true ;
                var a2 = 10  ;
                var f1 = function(){
                    alert(‘f1‘);
                }
                var f2 = function(){
                    alert(‘f2‘);
                }
                // 把块级作用域里的执行结果赋值类我的单体对象
                return {  //返回要执行才return
                        attr1: a1 ,
                        attr2: a2 ,
                        method1 : function(){
                            return f1();
                        },
                        method2 : function(){
                            return f2();
                        }
                } ;
            })();//Singleton = {attr1: a1 ,attr2: a2 ,method1 :method2 :  }

            alert(BHX.Singleton.attr1);//改变Singleton不会改变var a1,a2
            BHX.Singleton.method1();
        </script>
    </head>
    <body>
    </body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf8>
        // 惰性单体(和闭包单体有一些相似的地方)
        // 命名空间
        var Ext = {} ;
        Ext.Base = (function(){
            // 私用变量 控制返回的单例对象
            var uniqInstance ; // undefined
            // 需要一个构造器 init 初始化单体对象的方法
            function init(){
                    // 私用成员变量
                    var a1 = 10 ;
                    var a2 = true ;
                    var fn1 = function(){alert(‘fn1‘)};
                    var fn2 = function(){alert(‘fn2‘)};
                    return {
                        attr1 : a1 ,
                        arrt2 : a2 ,
                        method1 : function(){
                            return fn1();
                        },
                        method2 : function(){
                            return fn2();
                        }
                    };
            }
            return {//不像之前的,代码一执行,Base就有了很多属性,这里只有一个方法。
                getInstance : function(){//只有Base调用了方法才返回很多属性,
                    if(!uniqInstance){ //每次返回同一个对象,不加判断就返回不是同一个对象,
                        uniqInstance = init();
                    }
                    return uniqInstance ;
                }
            };
        })();

        alert(Ext.Base.getInstance().attr1);
        Ext.Base.getInstance().method1();

        // 分支单体 (判断程序的分支 <浏览器差异的检测>)
        var Ext = {} ;
        var def =  false ;
        Ext.More = (function(){
            var objA = {        // 火狐浏览器 内部的一些配置
                    attr1:‘FF属性1‘
                    // 属性1
                    // 属性2
                    // 方法1
                    // 方法2
            } ;
            var objB = {        // IE浏览器 内部的一些配置
                    attr1:‘IE属性1‘
                    // 属性1
                    // 属性2
                    // 方法1
                    // 方法2
            } ;
            return (def) ?objA:objB;
        })();
        alert(Ext.More.attr1);
        </script>
    </head>
    <body>
    </body>
</html>
时间: 2024-12-20 00:47:48

js21---单体(单例)模式的相关文章

Singleton(单例)模式

Singleton(单例)模式用于确保某个类只有一个实例,并且为之提供一个全局访问点. Singleton模式适用情况: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时 在任何情况下,Singleton模式都建议我们提供能够访问单例对象的公有静态方法.如果使用这个方法创建一个对象,该方法将承担确保仅创建一个实例的责任. Singleton 定义一个Instance操作,允许客户访问它的唯一实例

面试题集锦&amp;&amp;实现Singleton(单例)模式-JAVA版

题目:设计一个类,我们只能生产该类的一个实例.(来自<剑指Offer>) 解析:只能生产一个实例的类是实现Singleton(单例)模式的类型.由于设计模式在面向对象程序设计中起着举足轻重的作业,在面试过程中很多公司都喜欢问一些与设计模式相关的问题.在常用的模式中,Singleton是唯一一个能够用短短几十行代码完整实现的模式.因此,写一个Singleton的类型是一个很常见的面试题. 以下我们给出几种解法,供大家参考. *不好的解法一:只适用于单线程环境. 由于要求只能产生一个实例,因此我们

javascript设计模式-singleton(单例)模式

singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,则会简单返回该对象的引用.单例模式不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它需要一些信息,而这些信息在初始化期间可能无法获取,对于没有察觉到之前的引用代码,它们不会提供方便检索方法,这是因为它既不是对象,也不是由一个single返回的类,而是一个结构,在js中,singleton充当共享资源命

Java设计模式:Singleton(单例)模式

概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例模式主要是为了避免创建多个实例造成的资源浪费,以及多个实例多次调用容易导致结果出现不一致等问题.例如,一个系统只能有一个窗口管理器或文件系统,一个程序只需要一份全局配置信息. 应用场景 资源共享的情况下,避免由于资源操作时导致的性能或损耗等.如缓存.日志对象.应用配置. 控制资源的情况下,方便资源之

从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备

关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧. 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧.当然,本文总结Singleton模式,对于其他设计模式不做叙说. Singleton模式,即单例模式.顾名思义,主要用于做应用程序的资源共享控制.用途很多?? 实质为,单例是在程序声明周期里 有且仅有 被实例化过一次的类.为确保实例化的唯一,利用类的 类(static)方法来生成和访问对象. 至此,你便可以在程序

C++ Singleton (单例) 模式最优实现

参考:http://blog.yangyubo.com/2009/06/04/best-cpp-singleton-pattern/ 索引 静态化并不是单例 (Singleton) 模式 饿汉模式 懒汉模式 (堆栈-粗糙版) 懒汉模式 (局部静态变量-最佳版) 范例代码和注意事项 (最优实现) 扩展阅读 参考资料 我非常赞成合理的使用 设计模式 能让代码更容易理解和维护, 不过我自己除了简单的 单例 (Singleton) 模式 外, 其它都很少用 :-) 可耻的是, 直到前段时间拜读了 C++

[Java设计模式](一)怎样实现Singleton(单例)模式编程

单例模式是开发模式中最简单,最易于理解的一种模式.简单地说,它指的就是始终保持一个实例的意思.但是,Java的类是可以穿件多个实例的,那么,怎么实现呢? 顾名思义,单例模式就是只有一个实例.单例模式确保某一个类只有一个实例,这个类称为单例类,单例模式有3个要点: ①是某个类只能有一个实例: ②它必须自行创建这个实例: ③是它必须自行向整个系统提供这个实例.例如,一些资源管理器常常设计成单例模式. 在计算机系统中,需要管理的资源有很多,例如每台计算机可以有若干个打印机,但只能有一个打印控制器,以避

struts2的action是多例,servlet是单例

struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的结果不一样.举个例子:有一块布长度300cm,能做一件上衣(用掉100cm)和一件裤子(用掉200cm);甲和乙同时访问得到的 长度都是300cm,甲想做上衣和裤子,他先截取100cm去做上衣,等上衣做完再去做裤子,而乙这时正好也拿100cm去做上衣,那 好,等甲做完上衣再做裤子的时候发现剩下的布(

单例简单介绍

Singleton(单例)模式 Singleton 模式经常来做应用程序级别的共享资源控制, 应该说这个模式的使用频率非常高, 现在来看看在 Objective-C 里面的实现方法. 要实现一个 Singleton Class, 至少需要做以下四个步骤: 1. 为 Singleton Object 实现一个静态实例, 初始 化, 然后设置成 nil. 2. 实现一个实例构造方法(通常命名为 sharedInstance 或者 sharedManager)检查上面声名的静态实例 是否为 nil,

设计模式之----单体(单例)模式

设计模式之--单体(单例)模式 1.介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象. 2. 简单单体与闭包单体 在JavaS