写鸿蒙应用别硬怼代码!这些设计模式能让你事半功倍【华为根技术】

举报
Echo_Wish 发表于 2025/06/24 22:20:17 2025/06/24
【摘要】 写鸿蒙应用别硬怼代码!这些设计模式能让你事半功倍

写鸿蒙应用别硬怼代码!这些设计模式能让你事半功倍

最近和一位初学者聊天,他说开发鸿蒙应用的感觉就像在“搭积木”,一层层堆上去,但越搭越乱,组件之间耦合得一团浆糊,后期维护如噩梦,重构更是动一发牵全身。

我听完只说了四个字:用设计模式。

说白了,鸿蒙应用开发早就不是“写功能”那么简单了,咱得有架构、有分层、有套路。

今天咱们就聊聊:鸿蒙应用开发中最实用的设计模式有哪些,怎么优雅地用它们提升代码质量、开发效率和扩展能力?


一、先说句大实话:鸿蒙不是安卓的“马甲”

很多人误以为:写过安卓就能写鸿蒙,其实鸿蒙(尤其是ArkTS应用)在理念上更像Vue + Flutter + 前后分离的结合体。

所以很多之前“撸一堆函数式组件就完事”的做法,在鸿蒙里会迅速“失控”。组件多了、状态复杂了、交互频繁了——如果你还不设计好结构,那注定是后期翻车的。


二、三种最实用的鸿蒙设计模式,你一定要会

🧩 1. 观察者模式 —— 玩转状态管理和数据驱动视图更新

适用场景:页面根据数据变化自动刷新,组件间通信、通知系统状态更新。

鸿蒙中你可以用@Observed@State@Prop 等装饰器实现数据驱动的响应式UI。

举个例子:

你做一个“智能家居控制面板”,每次设备状态变化,所有绑定它的组件都得更新状态。

@Observed class DeviceStore {
  isOn: boolean = false;

  toggle() {
    this.isOn = !this.isOn;
  }
}

@Entry
@Component
struct DeviceSwitch {
  @State store: DeviceStore = new DeviceStore();

  build() {
    Column() {
      Text(this.store.isOn ? '开' : '关')
      Button('切换', () => {
        this.store.toggle();
      })
    }
  }
}

优点:数据变化 -> UI自动更新,逻辑分离,代码更清晰。

补充建议:别滥用全局状态,推荐用轻量的事件通知或全局Bus做中间件通信。


🧱 2. 工厂模式 —— 管理复杂组件的生成逻辑

适用场景:不同业务下加载不同类型的页面、卡片、弹窗等组件。

鸿蒙ArkTS强调组件解耦,如果你的App里有很多“类型卡片”或“行为按钮”,就该考虑用工厂模式来集中管理它们。

举个例子:

interface Card {
  render(): void;
}

class WeatherCard implements Card {
  render() {
    console.log('渲染天气卡片');
  }
}

class HealthCard implements Card {
  render() {
    console.log('渲染健康卡片');
  }
}

class CardFactory {
  static getCard(type: string): Card {
    switch (type) {
      case 'weather': return new WeatherCard();
      case 'health': return new HealthCard();
      default: throw new Error('未知卡片类型');
    }
  }
}

调用:

let card = CardFactory.getCard('weather');
card.render();

优点:后期加新卡片只需要新增类,不需要改原逻辑,符合开闭原则


🧠 3. 策略模式 —— 管理用户行为与响应规则

适用场景:有多种用户行为触发不同响应策略,比如会员等级决定功能权限。

策略模式让你的判断逻辑从冗长的if-else中独立出来,代码更优雅,也便于维护。

举个例子:

interface PaymentStrategy {
  pay(amount: number): void;
}

class CreditCardPay implements PaymentStrategy {
  pay(amount: number) {
    console.log(`信用卡支付:${amount}`);
  }
}

class WeChatPay implements PaymentStrategy {
  pay(amount: number) {
    console.log(`微信支付:${amount}`);
  }
}

class PaymentContext {
  constructor(private strategy: PaymentStrategy) {}

  executePayment(amount: number) {
    this.strategy.pay(amount);
  }
}

调用:

let context = new PaymentContext(new WeChatPay());
context.executePayment(99.9);

优点:新增支付方式不动原逻辑,调用时可以动态切换策略,灵活性拉满


三、鸿蒙项目分层的“黄金组合”:MVVM + 设计模式

我们很多鸿蒙项目,建议采用 MVVM 架构

  • Model:存储数据层,比如数据库、接口数据;
  • ViewModel:业务处理和数据中转层(搭配观察者/策略模式);
  • View:页面展示组件层(配合ArkTS语法糖)。

举个具体场景:

  • Model 层:DeviceModel.ts 用于处理设备控制接口;
  • ViewModel 层:DeviceViewModel.ts 用于绑定状态、控制行为;
  • View 层:ArkTS 页面组件绑定状态展示页面。

这个结构能大大提升团队协作效率、组件复用能力,也为设计模式的引入打好了地基。


四、现实踩坑经验分享:设计模式 ≠ 多用就是好

我见过不少同学,一学会设计模式就“哪里都想塞一个”,结果原本清爽的代码变得比没模式还乱。

我的建议是:

  • 优先选择“解耦”目的明显的地方用模式,别为了“装设计感”而用;
  • 团队提前约定统一策略模式、工厂注册点等结构,别写出一堆分支没人知道注册在哪;
  • 别自己手搓框架,鸿蒙ArkTS生态已有很多优秀的状态管理/路由库,可借力。

五、写在最后:设计模式,是程序员的“武德”

我一直说一句话:“写代码是技术,写得好看是修养。”

设计模式就是你代码的“体面”,它不是教条,而是经验沉淀的智慧提炼

鸿蒙不是谁都能轻易玩明白的生态,它融合了前端、终端、设备互联等多重复杂性。而设计模式,就是我们在鸿蒙这片复杂海洋中航行的航标。

别等项目写成意大利面才后悔,早点用好设计模式,未来你会感谢现在这个细心又爱思考的自己。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。