js面向对象,根据传入的名称,返回专用管理变量的类,名称不同返回不同实例,名称相同返回同一实例,当前名称没有对应的实例则创建
时间: 2023-05-23 08:04:03 浏览: 183
js的面向对象
一个常见的实现方式是通过单例模式来实现。具体地,可以定义一个类管理器,其中维护一个字典,存储各个实例,根据名称返回对应实例或创建新实例并返回,代码示例如下:
```javascript
class SingletonManager {
constructor() {
this.instances = {};
}
getInstance(name) {
if (name in this.instances) {
return this.instances[name];
} else {
const instance = new SpecialVariableManager(name);
this.instances[name] = instance;
return instance;
}
}
}
class SpecialVariableManager {
constructor(name) {
this.name = name;
this.variables = {};
}
getVariable(name) {
if (name in this.variables) {
return this.variables[name];
} else {
const variable = new SpecialVariable(name);
this.variables[name] = variable;
return variable;
}
}
}
class SpecialVariable {
constructor(name) {
this.name = name;
this.value = undefined;
}
set(value) {
this.value = value;
}
get() {
return this.value;
}
}
const manager = new SingletonManager();
const manager1 = manager.getInstance('manager1');
const manager2 = manager.getInstance('manager2');
const manager1_again = manager.getInstance('manager1');
console.log(manager1 === manager1_again); // true
const var1 = manager1.getVariable('var1');
const var2 = manager2.getVariable('var1');
console.log(var1 === var2); // false
```
在上述代码中,SingletonManager 类实现了单例模式,通过 instances 字典存储各个实例,getInstance 方法用于返回指定名称的实例,若该名称对应的实例已存在,则返回该实例,否则创建新实例并返回。SpecialVariableManager 类表示专用管理变量的类,其中 variables 字典存储各个变量实例,getVariable 方法用于返回指定名称的变量实例,若该名称对应的变量实例已存在,则返回该实例,否则创建新实例并返回。SpecialVariable 类表示具体变量实例,其中 value 表示变量的值,set 和 get 方法用于设置和获取该值。在代码末尾,展示了使用示例:得到两个不同的 Manager 实例,它们的名字相同但不是同一个实例;得到两个不同的 Varible 实例,它们的名字相同且不是同一个实例。
阅读全文