HarmonyOS 实践 - 设计模式在代码中的作用

news/2024/12/24 3:02:54 标签: javascript

在这里插入图片描述

在这里插入图片描述

文章目录

    • 前言
    • 设计模式概述
    • 单例模式:全局状态管理
      • 代码分析
    • 策略模式:界面主题切换
      • 代码分析
    • 示例测试
      • 单例模式测试
      • 策略模式测试
    • 体验评价
    • 总结

前言

在软件开发中,设计模式是公认的最佳实践,它能帮助开发者通过模块化和规范化的代码提升代码的可维护性和可扩展性。对于 HarmonyOS 的开发者而言,利用设计模式可以在代码精简和结构优化中发挥重要作用。本篇文章将探讨如何通过单例模式和策略模式在 HarmonyOS 框架下实现代码优化,并提供实际可运行的 Demo。

设计模式概述

单例模式 是一种创建型设计模式,用于确保某个类只有一个实例,并提供全局访问点。
策略模式 是一种行为型设计模式,用于定义一系列算法,并将它们封装起来,使它们可以互换。

通过这两种设计模式,我们可以在 HarmonyOS 开发中减少代码冗余,提升代码的灵活性。

单例模式:全局状态管理

代码分析

export class GlobalState {
  private static instance: GlobalState;
  private appState: { [key: string]: any } = {};

  private constructor() {}

  public static getInstance(): GlobalState {
    if (!GlobalState.instance) {
      GlobalState.instance = new GlobalState();
    }
    return GlobalState.instance;
  }

  public setState(key: string, value: any): void {
    this.appState[key] = value;
  }

  public getState(key: string): any {
    return this.appState[key];
  }
}

详细解析

  1. 单例模式实现

    • 静态属性 instance 用于保存唯一的实例。
    • 私有化构造函数:通过 private constructor() 禁止外部直接调用 new,从而确保类的实例只能通过类内部的静态方法 getInstance() 创建。
    • 静态方法 getInstance():第一次调用时会创建实例,后续调用直接返回已有实例。这种延迟初始化确保了实例仅在需要时被创建,节省资源。
  2. 全局状态存储

    • 使用一个 appState 对象以键值对形式存储数据。
    • setState() 方法:接收键和值,将其存储在 appState 中。
    • getState() 方法:根据键返回对应的值。
  3. 用法场景

    • 在开发中可以利用 GlobalState 存储应用的全局数据,如用户信息、应用配置等,从而避免冗余代码。

策略模式:界面主题切换

代码分析

interface ThemeStrategy {
  applyTheme(): void;
}

class LightTheme implements ThemeStrategy {
  applyTheme(): void {
    console.log('Applying Light Theme');
    // 调用 HarmonyOS API,实现主题切换
  }
}

class DarkTheme implements ThemeStrategy {
  applyTheme(): void {
    console.log('Applying Dark Theme');
    // 调用 HarmonyOS API,实现主题切换
  }
}

class ThemeContext {
  private strategy: ThemeStrategy;

  constructor(strategy: ThemeStrategy) {
    this.strategy = strategy;
  }

  public setStrategy(strategy: ThemeStrategy): void {
    this.strategy = strategy;
  }

  public applyTheme(): void {
    this.strategy.applyTheme();
  }
}

详细解析

  1. 策略模式结构

    • ThemeStrategy 是一个接口,定义了所有主题切换策略的公共行为(applyTheme() 方法)。
    • LightThemeDarkThemeThemeStrategy 的具体实现,分别实现了应用浅色主题和深色主题的逻辑。
  2. 上下文类

    • ThemeContext 是策略模式的上下文类,持有一个 ThemeStrategy 对象。
    • 它的 setStrategy() 方法允许动态替换策略,而 applyTheme() 方法调用当前策略对象的 applyTheme() 方法。
  3. 灵活性和扩展性

    • 新增主题切换策略时,只需实现 ThemeStrategy 接口,而无需修改已有代码。
    • 可以动态切换策略,从而实现更灵活的功能扩展。

示例测试

单例模式测试

const globalState = GlobalState.getInstance();
globalState.setState('user', { name: 'Alice', age: 25 });
console.log(globalState.getState('user')); // 输出: { name: 'Alice', age: 25 }

const newGlobalState = GlobalState.getInstance();
console.log(newGlobalState.getState('user')); // 输出: { name: 'Alice', age: 25 }

测试说明:

  • 两次调用 GlobalState.getInstance() 返回的是同一个实例。
  • 设置和获取全局状态数据验证了单例模式的正确性。

策略模式测试

const themeContext = new ThemeContext(new LightTheme());
themeContext.applyTheme(); // 输出: Applying Light Theme

themeContext.setStrategy(new DarkTheme());
themeContext.applyTheme(); // 输出: Applying Dark Theme

测试说明:

  • 第一次调用 applyTheme() 应用浅色主题,切换策略后调用则应用深色主题。
  • 通过动态替换策略对象,实现了灵活的主题切换功能。

体验评价

  • 单例模式通过统一的全局实例,避免了重复对象创建的问题,适用于全局数据存储等场景。
  • 策略模式通过封装变化,提供了更加灵活的功能扩展方式,适用于需要动态调整算法或行为的场景。
  • 在 HarmonyOS 的开发中,这两种模式能够有效提升代码精简度、可读性和可维护性。

这些设计模式的结合可以为开发者提供清晰的架构思路,并显著提高开发效率和代码质量。

总结

通过单例模式,我们可以轻松实现全局状态的管理;通过策略模式,可以动态切换不同的算法或功能实现,从而使代码更加灵活。设计模式不仅让代码更精简,也能显著提升开发效率和代码质量。

随着开发工具和框架的不断演进,设计模式在简化代码中的应用场景将更加广泛。HarmonyOS 开发者可以深入学习更多设计模式,并结合实际需求灵活运用,实现更高效的开发和更优雅的代码。


http://www.niftyadmin.cn/n/5797249.html

相关文章

【Mybatis-Plus】连表查询 逻辑删除 多租户

文章目录 连表查询逻辑删除多租户 连表查询 引入 mybatis-plus-join-boot-starter 依赖 <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId><version>1.5.1</version>…

VSCode 中 Git 功能比较:内置 Git、GitLens 与 Git History 插件

在软件开发领域&#xff0c;版本控制是维护代码变更的重要工具。Git 作为最流行的版本控制系统&#xff0c;被广泛集成在各种代码编辑器中。Visual Studio Code&#xff08;VSCode&#xff09;不仅内置了 Git 支持&#xff0c;还提供了丰富的扩展来增强 Git 功能。本文将对比 V…

SQL 使用带聚集函数的联结

聚集函数用于汇总数据&#xff0c;通常用于从一个表中计算统计信息&#xff0c;但也可以与联结一起使用。以下是一个例子&#xff0c;展示如何使用聚集函数统计每个顾客的订单数。 示例 1&#xff1a;使用 COUNT() 函数与 INNER JOIN 假设我们需要检索所有顾客及每个顾客所下…

AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用&#xff0c;今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机&#xff08;SVM&#xff09;是一种监督学习算法&#xff0c;广泛用于分类和回归问题。 它的核心思想是通过…

深度学习中的MSE与MAE

有空再把内容补上来 均方误差&#xff08;Mean Squared Error&#xff0c;MSE&#xff09;和平均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09;是深度学习中常用的两种损失函数&#xff0c;用于衡量模型预测结果与真实标签之间的差异&#xff0c;以下是…

robots协议

robots协议&#xff0c;也称为爬虫协议、爬虫规则、机器人协议等&#xff0c;其全称是“网络爬虫排除标准”&#xff08;Robots Exclusion Protocol&#xff09;。以下是对robots协议的详细介绍&#xff1a; 一、定义与功能 robots协议是指网站可以建立一个名为robots.txt的文…

我的个人博客正式上线了!

我的个人博客终于上线啦点此访问 经过一番折腾&#xff0c;我的个人博客终于上线啦&#xff01;这是一个属于我自己的小天地&#xff0c;可以用来记录生活点滴、技术分享以及一些随想。 在这里&#xff0c;我想分享一下搭建博客的整个过程和心得体会。 为什么要搭建博客&…

与乐鑫相约 CES 2025|创新技术引领物联网与嵌入式未来

2025 国际消费电子产品展览会 (International Consumer Electronics Show, CES) 将于 2025 年 1 月 7 至 10 日在美国拉斯维加斯盛大开幕。作为全球规模最大、水准最高&#xff0c;且影响力最广的消费电子类科技盛会&#xff0c;CES 每年都吸引着全球行业领袖、开发者和技术爱好…