鸿蒙NEXT开发全局上下文管理类(ArkTs)

复制代码
type CacheValue = string | number | boolean | object;

/**
 * 全局上下文管理类,用于存储和管理全局数据。
 * author: 鸿蒙布道师
 * since: 2025/04/15
 */
export class GlobalContext {
  private static instance: GlobalContext;
  private _objects = new Map<string, CacheValue>();

  // 私有构造函数,防止外部实例化
  private constructor() {}

  /**
   * 获取全局上下文实例(单例模式)。
   * @returns 全局上下文实例
   */
  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  /**
   * 存储数据到缓存中。
   * @param key - 数据键名
   * @param value - 数据值
   */
  public set<T extends CacheValue>(key: string, value: T): void {
    this._objects.set(key, value);
  }

  /**
   * 从缓存中获取数据。
   * @param key - 数据键名
   * @param defaultValue - 如果数据不存在时的默认值
   * @returns 缓存中的数据或默认值
   */
  public get<T extends CacheValue>(key: string, defaultValue?: T): T {
    return this._objects.has(key)
      ? (this._objects.get(key) as T)
      : (defaultValue as T);
  }

  /**
   * 检查缓存中是否存在指定的数据。
   * @param key - 数据键名
   * @returns 如果存在返回 true,否则返回 false
   */
  public has(key: string): boolean {
    return this._objects.has(key);
  }

  /**
   * 从缓存中移除指定的数据。
   * @param key - 数据键名
   */
  public remove(key: string): void {
    this._objects.delete(key);
  }

  /**
   * 清空所有缓存数据。
   */
  public clear(): void {
    this._objects.clear();
  }
}

代码如下:

TypeScript 复制代码
type CacheValue = string | number | boolean | object;

/**
 * 全局上下文管理类,用于存储和管理全局数据。
 * author: 鸿蒙布道师
 * since: 2025/04/15
 */
export class GlobalContext {
  private static instance: GlobalContext;
  private _objects = new Map<string, CacheValue>();

  // 私有构造函数,防止外部实例化
  private constructor() {}

  /**
   * 获取全局上下文实例(单例模式)。
   * @returns 全局上下文实例
   */
  public static getContext(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  /**
   * 存储数据到缓存中。
   * @param key - 数据键名
   * @param value - 数据值
   */
  public set<T extends CacheValue>(key: string, value: T): void {
    this._objects.set(key, value);
  }

  /**
   * 从缓存中获取数据。
   * @param key - 数据键名
   * @param defaultValue - 如果数据不存在时的默认值
   * @returns 缓存中的数据或默认值
   */
  public get<T extends CacheValue>(key: string, defaultValue?: T): T {
    return this._objects.has(key)
      ? (this._objects.get(key) as T)
      : (defaultValue as T);
  }

  /**
   * 检查缓存中是否存在指定的数据。
   * @param key - 数据键名
   * @returns 如果存在返回 true,否则返回 false
   */
  public has(key: string): boolean {
    return this._objects.has(key);
  }

  /**
   * 从缓存中移除指定的数据。
   * @param key - 数据键名
   */
  public remove(key: string): void {
    this._objects.delete(key);
  }

  /**
   * 清空所有缓存数据。
   */
  public clear(): void {
    this._objects.clear();
  }
}
相关推荐
嘉小华1 分钟前
第三章:焦点分发全链路源码解析
android
嘉小华3 分钟前
Android 协程全景式深度解析:第六章 高阶并发模式
android
嘉小华5 分钟前
Android 协程全景式深度解析:第七章 协程调试与性能优化
android
你过来啊你7 分钟前
Android开发中RxJava的使用与原理
android
思考着亮7 分钟前
6.结构体和类
ios
思考着亮7 分钟前
7.闭包
ios
你过来啊你1 小时前
Android Glide使用与底层机制详解
android
血舞之境1 小时前
Android 模块打包成aar遇到的空指针的问题
android
嘉小华1 小时前
Android 协程全景式深度解析:第四章 Flow响应式流
android·前端
用户1982333188401 小时前
让PAG动画在富文本中动起来
android·kotlin