(我不爱编程出品)设计模式-单例模式

说明

重塑那忘却的记忆,捡补没有必要的知识

概念

前端:确保一个类只有一个实例(前端是模拟类class)
后端:确保一个类只有一个实例
场景:这个物品只能有一个(比如限量级跑车);

如何理解

单例模式是最最最简单的模式,就是说,确保这个东西只能有一个;因为设计模式,一般来说,是从后端开始理解的,毕竟前端的js太飘了;从严格定义来说,我们还是从后端开始

后端看单例模式
java.test
/**有些对象只需要有一个就可以了,比如弹出框!**/
//饿汉模式
public Class Single{
	//把构造方法设置为私有化,不允许外部直接创建对象
	private Single(){}
	//创建类的唯一实例
	private Static Single instance = new Single();
	//提供一个用于获取实例的方法
	public Static Single getInstance(){return instance}
}
//懒汉模式
public Class Single{
	//把构造方法设置为私有化,不允许外部直接创建对象
	private Single(){}
	//创建类的唯一实例
	private Static Single instance;
	//提供一个用于获取实例的方法
	public Static Single getInstance(){
	if(instance == null){ return new Single();}
	else{ return instance }
	}
}
前端看单例模式

由于前端es6推出了模拟类的写法,所以这里我采用class的写法
这里主要是思想的打通,仿照Java的模式,其实最终的目的,是实现这个类不能多实例化,即使实例化,也必须是一样的;我们可以全局声明一个变量,然后实例化的时候去判断是否存在,但这样显然存在问题,就是把工作都交给使用者了,我们有没有办法在class里面,让使用者实例化时就有所提示呢?针对这个想法,我们去实现。

//由于前端js的构造函数没有办法私有化,默认要执行的,所以这里的单例函数,我们可以使用静态的方法来实例化,但是这样就不能用new了;这里的核心思想,其实就是用了类存在后的全局静态属性去存储instance;
class single {
        constructor() {           
        }
        static getInstance() {
            debugger;
            if (this.instance == undefined) {
                this.instance = new single();
                return this.instance;
            } else {
                return this.instance;
            }
        }
    }
等价于
class single {
        constructor() {           
        }
        static getInstance() {
            debugger;
            if (single.instance == undefined) {
                single.instance = new single();
                return single.instance;
            } else {
                return single.instance;
            }
        }
    }
进化版:其实最好的办法,是我们能够还是保持原有的new来实现,这里主要是利用了this
    class SingleClass {
        constructor() {
            if (SingleClass.instance == undefined) {
                SingleClass.instance=this;
                return SingleClass.instance;
            }else{
                return SingleClass.instance;
            }            
        }
    }

总结

好了,我感觉还有很多没有理解到位,但是,重要的事理解思想;
思想:实例化的对象有且只有一个;这也就是单例模式咯;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值