保证一个类只有一个实例,并可以进行全局访问。例如,唯一的登陆Modal等,都适用单例模式实现。
基本实现
使用getInstance 来创建类,并缓存实例
|
|
缺点
- 不透明,我们需要知道该实例有getInstance方法,否则不会这样创建实例
- 不通用,总要重写getInstance方法
透明单例
使用闭包缓存实例,在构造函数中判断
|
|
缺点
- 对远构造函数进行修改,且构造函数不符合单一功能原则,做了多件事
- 闭包看起来很难受
代理实现
使用新的函数代理实现
|
|
decorator实现
这种东西,是不是可以用decorator来实现一下?
|
|
|
|
惰性单利
惰性浮窗,只有在点击时,才创建浮窗
避免全局的浮窗,但是确保访问的都是同一浮窗。
decorator:
|
|
其他语言实现
实现原理
所有类都有构造方法,若显示定义构造方法,默认的构造方法就会失效。
所以说,将构造方法设置为private,外部程序就不能通过new来实例化了。
然后我们通过public的getInstance方法来维护实例被创建的次数并返回实例。
总结
单例模式非常常用,原理也很简单。总的来说,单例模式就是我们在创建对象时,希望该对象只可以被实例化一次,并且维护其只能进行一次实例化的工作不应该由用户进行,需要通过其本身或者代理方式进行。
以后在进行代码书写的时候,应该更多的考虑下,少写“bad smell”的代码