单例模式——JavaScript实现之由浅入深

前言

实现语言JavaScript,以一个家庭为根本对象形象描述单例模式的一些用法。

单例模式之简约时尚

最简单的单例模式,简约时尚,可以说是非常时髦(可以偷懒)。

var DataHouse = {
    dad: "jack",
    mom: "lucy",
    dog: "wangcai",
    getDogName: function () {
        return this.dog;
    },
    dogSay: function () {
        return this.dog + ":wang wang wang!"
    }
}

module.exports = DataHouse;

单例模式之隐私安全

啊,村头的王二狗跟jack有过节,jack不想让他知道老婆的名字,怎么办呢,我要隐藏起来,不给别人看到。可以用JavaScript的闭包解决,只返回需要暴露出来的名字。嘿嘿,王二狗可以骂jack,但是没办法直接骂Lucy,对此,Lucy感到很开心。

var DataHouseSafe = (function () {
    var _dad = "jack";
    var _mom = "lucy";
    var _dog = "wangcai";
    var _getDogName = function () {
        return _dog;
    };
    var _dogSay = function () {
        return _dog + ":wang wang wang!";
    };
    var publicObject = {
        baba: _dad,
        dog: _dog,
        wangwang: _dogSay()
    }
    return publicObject;
})();

module.exports = DataHouseSafe;

单例模式之名誉安全

我去,王二狗给Jack起花名了。Jack很生气,也给王二狗又起了个花名。Jack决心不给王二狗再起花名,使用了JavaScript的对象属性冻结,维护了自己的名誉安全。

var DataHouseSafe = (function () {
    var _dad = "jack";
    var _mom = "lucy";
    var _dog = "wangcai";
    var _getDogName = function () {
        return _dog;
    };
    var _dogSay = function () {
        return _dog + ":wang wang wang!";
    };
    var publicObject = {
        baba: _dad,
        dog: _dog,
        wangwang: _dogSay()
    }
    // 属性冻结
    Object.freeze(publicObject);
    return publicObject;
})();

module.exports = DataHouseSafe;

单例模式之懒汉模式

嘿,王二狗没办法骂人,心里憋着一口气,上门来找茬了。Jack决定放家里的旺财wangcai去看门,如果王二狗来了就把他唬回去。但是,总不能让旺财一直看门吧,Jack出门遛狗或者出去玩的时候可以不用看门,只要关键时候看门就好。Jack使用了懒汉模式解决了烦恼。

var DataHouseSafeLazy = (function () {
    var _dad = "jack";
    var _mom = "lucy";
    var _dog = "wangcai";
    var _getDogName = function () {
        return _dog;
    };
    var _dogSay = function () {
        return _dog + ":wang wang wang!";
    };

    var _instance = null;

    function _watchDoor(comeIn) {
        // 吠叫
        function warning() {
            return new DogWarning();
        }
        //摇尾巴
        function wave() {
            return new DogWave();
        }
        if (comeIn == "jack" || comeIn == "lucy") {
            return wave;
        } else {
            return warning;
        }
    }

    var publicObject = {
        baba: _dad,
        dog: _dog,
        wangwang: _dogSay(),

        watchHouse: function (comeIn) {
            if (_instance == null) {
                _instance = _watchDoor(comeIn);
            }
            return _instance;
        },
    }
    Object.freeze(publicObject);
    return publicObject;
})();

module.exports = DataHouseSafeLazy;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值