Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HarmonyOS 实践 - 设计模式在代码中的作用

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

原创
作者头像
连连LL
发布于 2024-12-19 15:03:32
发布于 2024-12-19 15:03:32
1210
举报
文章被收录于专栏:鸿蒙鸿蒙

前言

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

设计模式概述

单例模式 是一种创建型设计模式,用于确保某个类只有一个实例,并提供全局访问点。

策略模式 是一种行为型设计模式,用于定义一系列算法,并将它们封装起来,使它们可以互换。

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

单例模式:全局状态管理

代码分析

代码语言:typescript
AI代码解释
复制
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 存储应用的全局数据,如用户信息、应用配置等,从而避免冗余代码。

策略模式:界面主题切换

代码分析

代码语言:typescript
AI代码解释
复制
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 接口,而无需修改已有代码。
    • 可以动态切换策略,从而实现更灵活的功能扩展。

示例测试

单例模式测试

代码语言:typescript
AI代码解释
复制
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() 返回的是同一个实例。
  • 设置和获取全局状态数据验证了单例模式的正确性。

策略模式测试

代码语言:typescript
AI代码解释
复制
const themeContext = new ThemeContext(new LightTheme());
themeContext.applyTheme(); // 输出: Applying Light Theme

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

测试说明:

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

体验评价

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

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

总结

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端开发中常用的几种设计模式有哪些_设计模式原理
设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题,毕竟这是前人无数经验总结成的最佳实践,而代码实现则是对加深理解的辅助。
全栈程序员站长
2022/11/18
1.8K0
前端开发中常用的几种设计模式有哪些_设计模式原理
代码优化艺术:如何通过设计模式实现高效的功能模块
在实际软件开发的时候,想必大家对单例模式并不陌生,而且单例模式是确保一个类只有一个实例,并提供一个全局访问点。
三掌柜
2024/12/18
1800
代码优化艺术:如何通过设计模式实现高效的功能模块
Java常见设计模式
创建型模式主要用于对象的创建过程,以解耦对象的创建和使用。以下是几种常见的创建型设计模式。
王也518
2024/05/01
1460
Java常见设计模式
前端需要了解的9种设计模式 什么是设计模式?设计模式的类型一. 结构型模式(Structural Patterns)二. 创建型模式(Creat
设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。学习设计模式更多的是理解各种模式的内在思想和解决的问题,毕竟这是前人无数经验总结成的最佳实践,而代码实现则是对加深理解的辅助。
MudOnTire
2020/05/12
4.7K0
前端需要了解的9种设计模式
                            什么是设计模式?设计模式的类型一. 结构型模式(Structural Patterns)二. 创建型模式(Creat
设计模式-策略模式(一)
策略模式是一种设计模式,它允许在运行时选择算法的行为。策略模式定义了一系列算法,每个算法都完成了相同的任务,但它们使用不同的实现方法。这使得我们能够根据需要灵活地选择要使用的算法,而不必在代码中固定地指定一个算法。
堕落飞鸟
2023/05/05
1470
一篇文章读懂六大设计模式
ha_lydms
2023/08/09
2180
一篇文章读懂六大设计模式
设计模式--策略模式
策略模式是一种行为设计模式,它使您能够定义一系列算法,将它们封装起来,并根据需要在运行时轻松地切换它们。
软件架构师Michael
2023/07/27
2070
Java二十三种设计模式-策略模式(13/23)
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
正在走向自律
2024/12/18
2610
Java二十三种设计模式-策略模式(13/23)
JavaScript设计模式与开发实践 - 策略模式
引言 本文摘自《JavaScript设计模式与开发实践》 在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。 如果没有时间但是不在乎钱,可以选择坐飞机。 如果没有钱,可以选择坐大巴或者火车。 如果再穷一点,可以选择骑自行车。 在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。 这些算法灵活多样,而且可以随意互相替换。这种解决方案就是本文将要介绍的策略
laixiangran
2018/04/11
8640
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
在之前系列(3)里分享了工厂模式的工厂方法、抽象工厂,此外还有一个简单工厂模式没有分享。简单工厂模式是很多经典书籍里第一个分享的案例,是设计模式里最简单的模式之一。由于简单工厂模式和策略模式非常相似,今天他们结合一次讲完,如此系列2、3、4就讲完了最简单常见的10个设计模式。
拉丁解牛说技术
2025/05/30
920
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
我常用的六种设计模式
关于设计模式,我看了很多书籍和视频,但由于部分设计模式并不常用,所以也难免有些遗忘。后来索性就用到哪个时再深入学习哪个。
程序员的园
2025/03/17
740
我常用的六种设计模式
设计模式之策略模式(行为型)
策略模式:定义一系列算法,然后将每一个算法封装起来,并将它们可以互相替换。也就是将一系列算法封装到一系列策略类里面。策略模式是一种对象行为型模式。策略模式符合“开闭原则“
SmileNicky
2019/01/17
2920
JavaScript设计模式—-策略模式[通俗易懂]
声明:这个系列为阅读《JavaScript设计模式与开发实践》 —-曾探@著一书的读书笔记
全栈程序员站长
2022/09/14
3240
PHP中常用的设计模式
应用场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码。
南山竹
2024/06/26
1270
PHP中常用的设计模式
八大设计模式
在软件开发的广阔天地中,设计模式不仅是解决特定问题的模板,更是提升代码质量、可维护性和可扩展性的有力工具。通过本文的探讨,我们深入了解了8种设计模式:单例模式、工厂模式、策略模式、代理模式、观察者模式、装饰器模式、模板方法模式和建造者模式。每种模式都以其独特的方式,帮助我们应对软件开发中的复杂性,提供了一种清晰、结构化的方法来构建灵活且健壮的系统。
用户11397231
2024/12/18
1280
八大设计模式
.NET 中的设计模式应用
设计模式是软件设计与开发过程中常见问题的可复用解决方案。它们是通用模板或最佳实践,用于指导开发人员创建结构良好、可维护且高效的代码。
郑子铭
2025/02/18
460
.NET 中的设计模式应用
每个 C# 开发人员都应该掌握的 5 种强大的设计模式
想象一下你正在建造一栋房子。你是更愿意使用来自专业建筑师那些经过实践检验的蓝图呢,还是从头开始绘制所有的设计图呢?软件开发也是同样的道理!设计模式是针对常见问题的经实践验证的解决方案,它们提供了清晰的蓝图,能让你的代码更高效、更可复用且更易于维护。
郑子铭
2025/02/20
1390
每个 C# 开发人员都应该掌握的 5 种强大的设计模式
图解常见的九种设计模式
在软件工程中,设计模式(Design Pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。根据模式的目的来划分的话,GoF(Gang of Four)设计模式可以分为以下 3 种类型:
前端森林
2020/11/03
1.5K0
图解常见的九种设计模式
HarmonyOS 5.0 Next应用开发-架构设计中的设计模式与前端框架设计
今日推荐:《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(8)-Wireshark的TCP包详解-下篇
一键难忘
2024/12/02
2620
Java23种设计模式
提升代码重用性、可读性、可扩展性、可靠性,还能降低系统中类与类之间的耦合度,使程序呈现高内聚低耦合的特性。
小颜同学
2023/08/24
3270
推荐阅读
相关推荐
前端开发中常用的几种设计模式有哪些_设计模式原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档