单例模式Singleton Pattern
又名单件模式或单态模式,属于创建型模式,其涉及到一个单一的类,该类负责创建所需的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,保证访问的对象是只实例化一次的对象类。
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式主要有以下要点,首先是某个类只能有一个实例,再是其必须自行创建这个实例,以及其必须自行向整个系统提供这个实例。
Singleton
: 单例。Proxy
: 单例创建代理。对于ES6
来说实际上export default new Singleton()
即可将对象作为单例导出,但是目前ES6
模块是静态的,无法实现按需加载,当然可以使用babel
进行解析,也可以使用CommonJS
的require
,此外有一份新的规范提案也有可能将动态加载并入标准,下面是以代理与懒加载方式实现的单例模式。
class Singleton{
constructor(){
this.name = "singleton";
}
}
class ProxyCreateSingleton{
static getInstance(){
if(this.instance) return this.instance;
return (this.instance = new Singleton);
}
}
(function() {
var instance1 = ProxyCreateSingleton.getInstance();
var instance2 = ProxyCreateSingleton.getInstance();
console.log(instance1 === instance2); // true
console.log(new Singleton() === new Singleton()); // false
})();
https://github.com/WindrunnerMax/EveryDay
https://juejin.im/post/6844903874210299912
https://www.runoob.com/design-pattern/singleton-pattern.html
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/singleton.html