单例模式是一个编程中使用频率很高的模式,各种语言的写法都差不多,TS的也不例外。
单例模式是为了解决一个应用中的内存只存在一份,不允许多个的需求,类似于主题。下面通过theme 主题切换举例
主题单例编写
首先单例一般基于一个类,屏蔽到类的构造函数,以免通过其他方式生成类实例。
只要确保函数生成途径只有一种且保证实例只有一个即可。
单例代码:
class Theme {
//一个静态全局实例
private static instance:Theme
//不允许访问其他构造函数
private constructor() {}
static shared(){
if (!this.instance) {
this.instance = new Theme()
}
return this.instance
}
}
到这应该就完成了主要部分
思考
现在有个需求,需要单例有个主题属性,和切换方法的时候,是否还用static
我理解的js 中的static 相当于往类的原型里添加,所以我觉得还是为了少污染类的原型,还是觉得应该加到对象上。
class Theme {
//一个静态全局实例
private static instance:Theme
//不允许访问其他构造函数
private constructor() {}
theme:string = 'dark'
static shared(){
if (!this.instance) {
this.instance = new Theme()
}
return this.instance
}
changeTheme(theme:string){
this.theme = theme
}
}