以下是学习JavaScript设计模式(单例模式)的详细攻略:
什么是设计模式
设计模式是编程中广泛使用的可重用的解决方案。它们是处理常见问题的方法,有助于编写具有可靠性、灵活性和可复用性的代码。JavaScript 的设计模式主要是从其他编程语言中引入的,如 C++ 和 Java。
什么是单例模式
单例模式是一种创建型设计模式,它保证类只有一个实例,并提供全局访问该实例的方法。在 JavaScript 中,单例模式最常用于管理全局状态或共享资源。
单例模式的实现
以下是单例模式的实现(ES6 类和闭包两种方式):
ES6 类实现
class Singleton {
constructor() {
if (!Singleton.instance) {
Singleton.instance = this;
}
return Singleton.instance;
}
}
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true
闭包实现
const Singleton = (function() {
let instance;
function createInstance() {
const object = new Object({name: "Singleton Object"});
return object;
}
return {
getInstance: function() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true
示例一:单例模式实现全局状态管理
class Store {
constructor() {
this.state = {};
}
setState(key, value) {
this.state[key] = value;
}
getState(key) {
return this.state[key];
}
}
const store = new Store();
Object.freeze(store);
export default store;
在上面的示例中,我们使用一个叫做 Store
的类来管理全局状态,并确保只有一个实例被创建。在 Store
类的构造函数中,我们将全局状态定义为一个空对象。setState
方法用来设置状态属性,getState
方法用来获取状态属性。最后,我们将 store
对象冻结,以防止在运行时对其进行修改。
示例二:单例模式实现共享资源
class Connection {
constructor(url) {
if (Connection.instance) {
return Connection.instance;
}
this.url = url;
Connection.instance = this;
return this;
}
connect() {
console.log(`Connecting to ${this.url}`);
}
}
const conn1 = new Connection("https://example.com");
const conn2 = new Connection("https://example.com");
conn1.connect();
conn2.connect();
在上面的示例中,我们使用一个叫做 Connection
的类来管理共享资源——网络连接。在 Connection
类的构造函数中,我们使用了单例模式的方式确保只有一个实例被创建,并将该实例存储在一个名为 instance
的静态属性中。connect
方法用来打印连接地址。最后,我们创建了两个 Connection
实例 conn1
和 conn2
,并分别调用它们的 connect
方法。由于使用了单例模式,connect
方法只会打印一次连接地址。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习JavaScript设计模式(单例模式) - Python技术站