单例设计模式的优点
单例模式,就是说一个类只创建一个实例。
应用场景: Vuex;localStorage;日志记录;前端confirm提示框等。因为在一个程序中,只需要一个实例,里面的属性和方法都是共享的,没必要创建多个实例占据内存。
举例:在vuex中,使用createStore创建一个实例,然后挂载到vue app上,后续只存在这一个单一实例。
单例要求
- 对象创建不能由外部创建,只能在类中创建,即构造器要变为private。
- 属性和方法外部不能访问,对外都只提供一个唯一的可以访问的方法或属性。
- 唯一的方法或属性要为static,方便外部访问。
typescript实现单例
//这个类模拟创建一个localstroge
export default class MyLocalStorage {
count3!: number;
//只有一个实例
private static localstorage: MyLocalStorage
//把构造器设置为私有的,不允许外部来创建类的实例
private constructor() {
console.log("这是TS的单件设计模式的静态方法的构造器");
}
//至少应该提供一个外部访问的方法或属性,外部可以通过这个方法或属性来得到一个对象
public static getInstance() {
//判断是否只有一个实例
if (!this.localstorage) {
console.log("我是一个undefined的静态属性,用来指向一个对象空间的静态属性")
this.localstorage = new MyLocalStorage()
}
return this.localstorage
}
public setItem(key: string, value: any) {
localStorage.setItem(key, JSON.stringify(value))
}
public getItem(key: string) {
let value = localStorage.getItem(key)
return value != null ? JSON.parse(value) : null;
}
}
//外部调用第二步提供的静态方法来获取一个对象
let value = MyLocalStorage.getInstance()