一、介绍
- 系统中被唯一使用
- 一个类只有一个实例
- 单例类必须自己创建自己的唯一实例
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
解决问题:一个全局使用的类频繁的创建与销毁。
如何解决(实现思想):判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
注意:构造函数是私有的。单例模式实例出来的对象是完全一样的
二、事例
- 登录框(无论项目多么复杂,也只有一个登录框)
- 购物车(一个商场网站也只有一个购物车)
三、UML类图
四、代码演示
```javascript class SingleObject { login () {
} } // 编写静态方法 // 不在SingleObject方法里面写,就是想要getInstance不发生改变,无论new多少次,getInstance方法都是一样的 SingleObject.getInstance = (function () { let instance return function () {console.log('login ....')
} })() 注意:写一个自执行函数就是要造成闭包,外面的不能访问内部的变量,避免变量在全局下,造成变量污染if (!instance) {
instance = new SingleObject()
}
return instance
// 测试 let obj1 = new SingleObject.getInstance() obj1.login() let obj2 = new SingleObject.getInstance() obj2.login()
console.log(‘obj1===obj2’, obj1 === obj2) // true // 单例模式,就是两个对象完全一样,===也是true // 是真正的单例,也是唯一的实例
// 注意:如果是直接new SingleObject()也不会报错,但是和原来的就不是一个对象了 console.log(‘———分割线———-‘) let obj3 = new SingleObject() console.log(‘obj1===obj3’, obj1 === obj3) // false ```