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