设计思路
- 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在本模块中,系统模块应该是唯一的,避免重复创建资源消耗。
- 工厂模式:提供一个创建对象的接口,将对象的创建和使用分离。在系统模块中,可能会创建一些子模块或者服务,通过工厂模式来创建这些对象,提高代码的可维护性和可扩展性。
- 实例成员与静态成员:
- 实例成员:用于存储和管理与特定实例相关的数据和状态。在单例模式下,这些实例成员是全局唯一的,所有对单例的操作都基于这些实例成员。
- 静态成员:用于提供与类相关的通用功能或常量,不依赖于具体的实例。在工厂模式中,静态成员可以作为创建对象的工厂方法,同时也可以存储一些共享的配置信息等。
代码实现
class SubModule {
// 子模块的实例成员
private data: string;
constructor(data: string) {
this.data = data;
}
public getData(): string {
return this.data;
}
}
class SystemModule {
// 单例模式:存储唯一实例
private static instance: SystemModule;
// 实例成员:存储子模块列表
private subModules: SubModule[] = [];
// 工厂模式:创建子模块的静态方法
public static createSubModule(data: string): SubModule {
return new SubModule(data);
}
// 单例模式:获取单例实例的静态方法
public static getInstance(): SystemModule {
if (!SystemModule.instance) {
SystemModule.instance = new SystemModule();
}
return SystemModule.instance;
}
// 实例方法:添加子模块到实例成员列表
public addSubModule(subModule: SubModule): void {
this.subModules.push(subModule);
}
// 实例方法:获取所有子模块的数据
public getSubModuleData(): string[] {
return this.subModules.map(subModule => subModule.getData());
}
}
// 使用示例
const subModule1 = SystemModule.createSubModule('data1');
const subModule2 = SystemModule.createSubModule('data2');
const systemModule = SystemModule.getInstance();
systemModule.addSubModule(subModule1);
systemModule.addSubModule(subModule2);
console.log(systemModule.getSubModuleData());
实例成员和静态成员的作用及协作关系
- 静态成员:
createSubModule
方法体现了工厂模式,它作为静态方法,不需要创建 SystemModule
的实例就可以创建 SubModule
对象,方便在不同地方创建子模块。
getInstance
方法是单例模式的关键,通过静态方法提供了全局访问单例的入口,保证了 SystemModule
只有一个实例。
- 实例成员:
subModules
实例成员用于存储具体的子模块对象,是系统模块实际管理的资源。
addSubModule
和 getSubModuleData
实例方法操作 subModules
实例成员,实现对子模块的管理和数据获取。
- 协作关系:
- 静态方法
createSubModule
创建子模块对象,然后通过实例方法 addSubModule
将创建的子模块添加到实例成员 subModules
中。
- 静态方法
getInstance
获取单例实例后,可以调用实例方法对实例成员进行操作,从而实现系统模块对资源的管理和服务的提供。