保证一个类只有一个实例,并提供一个访问它的全局访问点
实现
静态方法实现
js
class SingleTon{
//全局的访问点
static getInstance(){
// 保证一个类只有一个实例
if(!this.instance)
{
this.instance=new SingleTon()
}
return this.instance
}
}
let a=SingleTon.getInstance()
let b=SingleTon.getInstance()
console.log(a==b); //true
闭包实现
js
//2.闭包实现
function SingleTonBase(name)
{
this.name=name
console.log("构造函数::",name);
}
function getInstance()
{
let instance = null;
return function(name){
if(!instance)
{
instance = new SingleTonBase(name)
}
return instance
}
}
let SingleTon=getInstance()
let a=SingleTon("aaaa")
let b=SingleTon("bbb")
//构造函数:: aaaa
console.log(a==b); //true
Pinia中的单例模式
在Pinia中,单例模式的实现是通过defineStore
函数来完成的。
这个函数接受一个唯一的字符串作为参数,用于标识store。 当defineStore
函数被调用时,它会执行以下步骤:
- 首先,
defineStore
函数会检查是否已经存在一个具有相同标识的store实例。如果已经存在,则直接返回该实例。 - 如果不存在,则
defineStore
函数会创建一个新的store实例。这个实例是一个单例对象,在整个应用程序中是唯一的。 - 接下来,
defineStore
函数会为store实例添加一些属性和方法,例如state
、actions
和getters
等。这些属性和方法用于定义store的状态、行为和计算属性。 - 最后,
defineStore
函数会返回新创建的store实例。 通过这种方式,Pinia能够在整个应用程序中共享状态,并且保证了状态的一致性和可预测性。同时,单例模式也使得状态的管理更加简单和易于维护。