文档章节

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

osmos
 osmos
发布于 2015/03/13 11:00
字数 200
阅读 16
收藏 0

最简单的单例模式

var mySingleton = {
    property1: "something",
    property2: "something else",
    method1: function () {
        console. log('hello world' );
    }
};

扩展单例模式,增加私有变量和私有方法

var mySingleton = function () {
    // 私有变量
    var privateVariable = 'something private' ;
    // 私有方法
    function showPrivate() {
        console. log(privateVariable);
    }
    // 单例
    return {
        // 公有方法
        publicMethod: function () {
            // 内部访问私有方法
            showPrivate();
        },
        // 公有变量
        publicVar: 'the public can see this!'
    };
};
var single = mySingleton();
single.publicMethod();
console.log(single.publicVar);

按需初始化

var Singleton = (function() {
    var instantiated;
    function init() {
        // 单例
        return {
            publicMethod: function () {
                console. log('hello world' );
            },
            publicProperty: 'test'
        };
    }
    return {
        getInstance: function () {
            if (! instantiated) {
                instantiated = init();
            }
            return instantiated;
        }
    };
})();
Singleton.getInstance().publicMethod();

其它变种

var SingletonTester = (function () {
    function Singleton(options) {
        options = options || {};
        this.name = 'SingletonTester' ;
        this.pointX = args. pointX || 6;
        this.pointY = args. pointY || 10;
    }
    // 实例holder
    var instance;
    // 模拟静态变量和静态方法
    var _static = {
        name: 'SingletonTester' ,
        getInstance: function (options) {
            if (instance === undefined) {
                instance = new Singleton(options); 
            }
            return instance; 
        }
    }; 
    return _static;
})();
var singletonTest = SingletonTester.getInstance({
            pointX: 5
        });
console.log(singletonTest.pointX);


© 著作权归作者所有

osmos
粉丝 0
博文 13
码字总数 1752
作品 0
闵行
高级程序员
私信 提问
设计模式: 从ES5 到 TypeScript ——单例模式

Back in 1994, a book was authored by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides that discusses 23 desgin patterns, titled Design Patterns: Elements of Resuable ......

PinesCheng
06/24
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
JavaScript设计模式总结

之前看过《JavaScript设计模式与开发实践》这本书,对书中的设计模式和一些相关案例也有了一定的了解,同时把这些设计模式的应用对应在在一些其他的项目中,进行了一些整理,如下仅供参考: ...

jefferyE
03/26
0
0
JavaScript 中常见设计模式-单例模式

     单例模式两个条件   确保只有一个实例   可以全局访问   适用   适用于弹框的实现,全局缓存   实现单例模式      JavaScript 中的单例模式   因为 JavaScript 是无...

webstack前端栈
2018/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部