javascript设计模式-单体模式

场景:假设有一个Girl(美女)实体,该实体拥有姓名、年龄两个属性,拥有显示姓名和洗澡两个方法,下面分步骤构造该实体。

1、用简单基本单体模式:

var Girl1 = {
    name:"昭君",
    age:33,
    showName:function(){
        alert("我的名字是:" + this.name);
    },
    bathe:function(){
        console.log("我是" + this.name + ",我在洗澡!");
    }
}
console.log("Girl.age=" +Girl1.age);
Girl1.bathe();

 

问题:美女的名字和洗澡这么隐私的是不能随便被访问的吧,那就要用到(私用成员的单体)

//使用下划线表示法
1
var Girl2 = { 2 name:"昭君", 3 _age:33, 4 showName:function(){ 5 console.log("我的名字是:" + this.name); 6 }, 7 _bathe:function(){ 8 console.log("我是" + this.name + ",我在洗澡!"); 9 } 10 } 11 console.log("Girl2.name=" +Girl2.name);//Girl3.name=昭君 12 console.log("Girl2.age=" +Girl2.age); //Girl.age=undefined 13 Girl2.showName();//我的名字是:昭君 14 Girl2.bathe();//Uncaught TypeError: Gird2.bathe is not a function

 

问题:如果我很猥琐,在洗澡的方法前面加一个下横线,那不是偷窥成功了吗?快使用闭包吧

 1 //使用闭包
 2 var Gird3 = (function(){
 3     var age = 33;
 4     function bathe(){
 5         console.log("我是" + this.name + ",我在洗澡!");
 6     }
 7     return {
 8         name:"昭君",
 9         showName:function(){
10             console.log("我的名字是:" + this.name);
11         }
12     }
13 })();
14 console.log("Girl3.name=" +Gird3.name);//Girl3.name=昭君
15 console.log("Girl3.age=" +Gird3.age); //Girl.age=undefined
16 Gird3.showName();//我的名字是:昭君
17 Gird3.bathe();//Uncaught TypeError: Gird3.bathe is not a function

 

结果:完美

但是,美女是用来怜惜的,没事儿的时候可别随便拿出来秀哟,那我们就用惰性加载吧!!!

 1 //惰性实例化
 2 var Gird4 = (function(){
 3     var girl = null;
 4     function constructor(){
 5         var age = 33;
 6         function bathe(){
 7             console.log("我是" + this.name + ",我在洗澡!");
 8         }
 9         return {
10             name:"昭君",
11             showName:function(){
12                 console.log("我的名字是:" + this.name);
13             }
14         }
15     }
16     return {
17         getInstance:function(){
18             if(girl) return girl;
19             return constructor();
20         }
21     }
22     
23 })();
24 Gird4.getInstance().showName();

 

转载于:https://www.cnblogs.com/tengri/p/5277400.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值