数据层

This commit is contained in:
chen wei bo
2025-08-14 16:30:20 +08:00
parent 10e90791b7
commit cd45e1783a
9 changed files with 301 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
/**
* 数据类基类
* 提供数据类的生命周期管理和基础功能
*/
export class BaseData {
/** 是否已初始化 */
protected _isInitialized: boolean = false;
/** 是否已销毁 */
protected _isDestroyed: boolean = false;
/** 数据ID */
protected _dataId: string = '';
/**
* 初始化数据
* @param dataId 数据ID
*/
public init(dataId?: string): void{
if (this._isInitialized) return;
this._isInitialized = true;
if (dataId) {
this._dataId = dataId;
}
}
/**
* 重置数据到初始状态
*/
public reset(): void{
}
/**
* 清空数据内容
*/
public clear(): void{
}
/**
* 销毁数据对象
*/
public destroy(): void{
if (this._isDestroyed) return;
this.clear();
this._isDestroyed = true;
}
/**
* 获取数据ID
*/
public getDataId(): string {
return this._dataId;
}
/**
* 设置数据ID
*/
public setDataId(dataId: string): void {
this._dataId = dataId;
}
/**
* 是否已初始化
*/
public isInitialized(): boolean {
return this._isInitialized;
}
/**
* 是否已销毁
*/
public isDestroyed(): boolean {
return this._isDestroyed;
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "16b07bae-92dc-42b0-bb68-493bb15d8099",
"files": [],
"subMetas": {},
"userData": {}
}
+119
View File
@@ -0,0 +1,119 @@
/**
* 数据管理器
* 统一管理所有数据类
*/
import { BaseData } from "./BaseData";
import { LoginData } from "./LoginData";
import { PlayerData } from "./PlayerData";
/**
* 集中定义数据ID,避免写错字符串
*/
export enum DataId {
Login = "login",
Player = "player",
}
/** 构造器类型 */
type DataCtor<T extends BaseData = BaseData> = new () => T;
export class DataManager {
private static _I: DataManager | null = null;
public static get I(): DataManager {
if (!DataManager._I) DataManager._I = new DataManager();
return DataManager._I;
}
// 数据实例缓存
private _dataMap: Map<string, BaseData> = new Map();
// 数据ID到构造器的映射
private _config: Map<string, DataCtor> = new Map();
private constructor() {}
/**
* 初始化:注册 数据ID → 构造器
*/
public init(): void {
console.log("[DataManager] 数据管理器初始化");
this.register(DataId.Login, LoginData);
this.register(DataId.Player, PlayerData);
}
/**
* 注册一个数据ID及其对应的构造器
*/
public register<T extends BaseData>(dataId: string, ctor: DataCtor<T>): void {
if (this._config.has(dataId)) {
console.warn(`[DataManager] 重复注册数据ID: ${dataId},将覆盖旧构造器`);
}
this._config.set(dataId, ctor);
}
/**
* 获取数据(已存在则直接返回;否则按配置自动实例化并缓存)
*/
public getDataById<T extends BaseData = BaseData>(dataId: string): T | null {
// 1) 先从缓存取
const cached = this._dataMap.get(dataId) as T | undefined;
if (cached) return cached;
// 2) 缓存没有→ 查找构造器
const Ctor = this._config.get(dataId) as DataCtor<T> | undefined;
if (!Ctor) {
console.warn(`[DataManager] 未找到 dataId 的构造器配置: ${dataId}`);
return null;
}
// 3) 动态创建 & init & 缓存
const instance = new Ctor();
// 若你的 BaseData.init 接受 dataId,可传入
instance.init?.(dataId);
this._dataMap.set(dataId, instance);
console.log(`[DataManager] 实例化并缓存数据: ${dataId}`);
return instance;
}
/**
* 移除数据
*/
public removeData(dataId: string): boolean {
const data = this._dataMap.get(dataId);
if (data) {
data.destroy?.();
this._dataMap.delete(dataId);
console.log(`[DataManager] 移除数据: ${dataId}`);
return true;
}
return false;
}
/**
* 重置所有数据
*/
public resetAllData(): void {
console.log("[DataManager] 重置所有数据");
this._dataMap.forEach((data) => data.reset?.());
}
/**
* 清空所有数据
*/
public clearAllData(): void {
console.log("[DataManager] 清空所有数据");
this._dataMap.forEach((data) => data.clear?.());
}
/**
* 销毁所有数据
*/
public destroyAllData(): void {
console.log("[DataManager] 销毁所有数据");
this._dataMap.forEach((data) => data.destroy?.());
this._dataMap.clear();
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "6ecd13c4-1240-4d6a-b783-5fca62a8f32e",
"files": [],
"subMetas": {},
"userData": {}
}
+32
View File
@@ -0,0 +1,32 @@
/**
* 登录数据
*/
import { BaseData } from "./BaseData";
export class LoginData extends BaseData {
private _name: string = '';
private _score: number = 0;
public reset(): void {
this._name = '';
this._score = 0;
}
public clear(): void {
this._name = '';
this._score = 0;
}
public destroy(): void {
super.destroy();
// 这里可以做额外释放资源的操作
}
public setName(name: string): void {
this._name = name;
}
public getName(): string {
return this._name;
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "2095514d-fe00-441c-aab1-fc6059334eec",
"files": [],
"subMetas": {},
"userData": {}
}
+32
View File
@@ -0,0 +1,32 @@
/**
* 玩家数据
*/
import { BaseData } from "./BaseData";
export class PlayerData extends BaseData {
private _name: string = '';
private _score: number = 0;
public reset(): void {
this._name = '';
this._score = 0;
}
public clear(): void {
this._name = '';
this._score = 0;
}
public destroy(): void {
super.destroy();
// 这里可以做额外释放资源的操作
}
public setName(name: string): void {
this._name = name;
}
public getName(): string {
return this._name;
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "413f999c-d31c-4a06-97d6-116de37d3077",
"files": [],
"subMetas": {},
"userData": {}
}