前言
单例模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
单例模式
应用场景:用于解决资源使用时的冲突问题,一般是对象创建后使用时,该实例要全局唯一。其实也可以指定数量的对象实例唯一,不一定非得只有一个,能够区分边界就行,能够对边界区分隔离,就能解决资源使用时冲突的问题。单例模式中对象创建的方式有两种,一种是预加载,另一种是懒加载。
理解:对象的创建和使用解耦了,单例模式适用于使用对象时资源冲突的问题,比如所有资源都已经放入一个对象中缓存住了,下一次如果使用这个缓存的对象就会非常的方便,否则使用一个重新创建的崭新对象,就会丢失之间的数据记录,造成系统不稳定,就像你已经登录过了,假使你之后的每一次操作都要再进行登录,那用户会觉得很烦恼。预加载就像点击一个APP后自动进行登录,而懒加载像是你点击APP后,APP登录界面的账号密码都已经自动填上了,只需要你点击一下登录按钮。
namespace creative_mode_05 {
// 登录功能接口
interface Loginable {
login(): void
}
// 产品类,懒加载
class LoginForm implements Loginable {
// 唯一的实例和构造函数都上锁
private static instance?: LoginForm
private constructor() { }
login(): void {
console.log('1.登录成功')
}
static getLoginInstance(): LoginForm {
if (this.instance) {
return this.instance
}
return this.instance = new LoginForm()
}
}
// 产品类 预加载
class LoginForm2 implements Loginable {
// 唯一的实例和构造函数都上锁
private static instance: LoginForm2 = new LoginForm2()
private constructor() { }
login(): void {
console.log('2.登录成功')
}
static getLoginInstance(): LoginForm2 {
return this.instance
}
}
// 使用1
const loginFormInstance = LoginForm.getLoginInstance() // 实例创建的时机在第一次获取实例时,第一次获取才会创建,
loginFormInstance.login()
// 使用2
const loginForm2Instance = LoginForm2.getLoginInstance() // 实例创建的时机在这个LoginForm2的class被加载时
loginForm2Instance.login()
}