鸿蒙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();
  }
}
相关推荐
ajassi20005 小时前
开源 Arkts 鸿蒙应用 开发(五)控件组成和复杂控件
华为·开源·harmonyos
liuhaikang5 小时前
我做个一个APP叫【图影工具箱】:一站式解决视频提取音频和加水印的鸿蒙神器
harmonyos
法迪5 小时前
Android中Native向System Service进行Binder通信的示例
android·binder
谢道韫6666 小时前
鸿蒙组件通用事件开发全攻略:从基础交互到工程实践
microsoft·交互·harmonyos
darling_user8 小时前
Android14 耳机按键拍照
android
1688red8 小时前
IPv4编址及IPv4路由基础
运维·网络·华为
呆dai~8 小时前
基于原生能力的键盘控制
harmonyos·鸿蒙
QiYueFangBeiJing9 小时前
内网运行控制四百来个海康威视硬件物联网定员管控软件(华为平板电脑版)
物联网·华为·电脑
草明9 小时前
解决: React Native iOS webview 空白页
react native·react.js·ios