ArkTS之装饰器

装饰器(Decorator)是一种强大的元编程工具,它通过一种声明式的方式,为代码赋予新的行为或特性,而无需修改其源代码。在不同的技术栈中,装饰器有着不同的实现和应用,但其核心思想是统一的:增强、扩展、管理。

装饰器核心概念

装饰器:代码的"外挂"

装饰器就像给手机加装功能强大的外挂,它不会改变手机打电话的核心功能,但可以为其增加全新的能力,如游戏加速、AI助手等。这种增强是动态的、可插拔的。

装饰器本质上是一个函数,它接收目标(如函数、类、属性)作为参数,并返回一个修改后的版本。在实际应用中,它常被用来:

  • **插入横切关注点:**在不修改原代码的情况下,为函数添加日志、权限校验、性能计时等功能。
  • **实现设计模式:**例如,在Java中,装饰器模式(Decorator Pattern)通过组合方式动态地给对象添加职责。
  • **声明式编程:**在ArkTS等框架中,装饰器用于声明组件、管理状态,让开发者以更简洁的语法描述应用的结构和行为。

Python 装饰器:函数功能的"增强器"

Python 是最早广泛采用装饰器语法的主流语言之一,它为函数和类提供了强大的功能扩展能力。

常见内置装饰器

@property: 将方法转换为属性,实现对属性的访问控制。
@lru_cache: 自动缓存函数的返回值,避免重复计算。
**@functools.wraps:**在自定义装饰器中保持原函数的元数据。

自定义装饰器示例

以下是一个简单的计时装饰器,用于测量函数执行时间。

python 复制代码
import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 执行耗时: {end - start:.4f}秒")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(2)

slow_function()

ArkTS 装饰器:HarmonyOS 声明式UI的"引擎"

ArkTS(Ark TypeScript)是 HarmonyOS 的官方应用开发语言,其装饰器体系是构建声明式UI的核心。ArkTS 的装饰器主要分为四大类,每类解决特定的开发问题。

1. 组件定义类装饰器

这类装饰器用于定义和标记UI组件的结构和角色。

装饰器 作用 使用场景
@Component 标记一个自定义组件 构建可复用的UI单元
@Entry 标记应用的入口组件 每个页面有且仅有一个
@Preview 用于DevEco Studio预览 开发调试阶段

2. 状态管理与数据传递装饰器

这是ArkTS装饰器体系中最核心、最复杂的部分,用于管理应用的状态和数据流。

装饰器 作用 使用场景
@State 组件内部状态 计数器、开关等局部状态
@Prop 父→子单向传递 父组件向子组件传递数据
@Link 父子双向绑定 子组件修改影响父组件
@Provide/@Consume 跨层级共享数据 主题切换、用户信息等
@Observed/@ObjectLink 复杂对象响应式 对象属性变化触发更新

3. 存储与持久化装饰器

这类装饰器用于将状态与应用的持久化存储(如Preferences)关联起来,实现数据的保存和读取。

装饰器 作用 使用场景
@StorageProp 从全局存储读取只读属性 用户ID、配置常量等
@StorageLink 从全局存储读写共享数据 登录状态、语言选择等
@LocalStorageProp/@LocalStorageLink 页面内局部状态共享

4. UI构建与样式装饰器

这类装饰器用于构建和复用UI结构与样式,提升代码的可维护性。

装饰器 作用 使用场景
@Builder 定义可复用的UI片段 将重复的UI结构抽象为方法
@Styles 定义可复用的样式集合 统一应用的UI风格
@Extend 扩展已有组件的样式 为内置组件添加自定义样式

ArkTS 装饰器速查表

为了方便您快速查阅,这里将ArkTS的核心装饰器及其功能总结如下:

装饰器 作用域 核心功能
@Component struct 声明一个UI组件
@Entry struct 标记页面入口组件
@State 属性 组件内部状态
@Prop 属性 父→子单向传递
@Link 属性 父子双向绑定
@Provide/@Consume 属性 跨层级共享数据
@Observed/@ObjectLink class/属性 复杂对象响应式
@StorageProp/@StorageLink 属性 全局存储读写
@LocalStorageProp/@LocalStorageLink 属性 局部存储读写
@Builder 方法 定义可复用UI片段
@Styles/@Extend 方法 定义和扩展样式
@Preview struct 开发者预览组件
相关推荐
笔触狂放43 分钟前
【项目】基于ArkTS的老年人智能应用开发(1)
harmonyos·arkts·鸿蒙
UnicornDev1 天前
【HarmonyOS 6】底部悬浮导航的沉浸光感适配(API23)
华为·harmonyos·arkts·鸿蒙·鸿蒙系统
UnicornDev6 天前
【HarmonyOS 6】设置页面 UI 设计
ui·华为·harmonyos·arkts·鸿蒙
UnicornDev9 天前
【HarmonyOS 6】基于API23的底部悬浮导航
华为·harmonyos·arkts·鸿蒙·鸿蒙系统
积水成渊,蛟龙生焉10 天前
鸿蒙手势处理篇(滑动冲突、基础手势、组合手势)
华为·arkts·鸿蒙·滑动冲突·手势冲突·基础手势·组合手势
纯爱掌门人10 天前
聊聊 HarmonyOS 上的应用内通知授权弹窗
前端·harmonyos·arkts
UnicornDev12 天前
【HarmonyOS 6】练习记录页面 UI 设计
ui·华为·harmonyos·arkts·鸿蒙
哈__13 天前
新手入门harmonyOS开发:手把手教你用ArkTS实现一个天气应用
harmonyos·arkts
积水成渊,蛟龙生焉14 天前
鸿蒙装饰器V2详解
华为·harmonyos·arkts·鸿蒙·ark
积水成渊,蛟龙生焉15 天前
鸿蒙通用事件(事件分发、事件拦截等)
华为·arkts·鸿蒙·事件分发·通用事件·事件拦截