HarmonyOS 鸿蒙Next中观察者模式
HarmonyOS 鸿蒙Next中观察者模式
观察者模式
- 属于行为型模式,又叫做发布-订阅模式
定义 :对象间的一对多依赖关系,使得当一个对象(主题,Subject)状态改变时,所有依赖它的对象(观察者,Observer)都会自动收到通知并更新。
具体主题:微信公众号
具体观察者:关注公众号的微信用户
优点:降低了主题和观察者的耦合关系 ,主题发送通知,所有的观察者都会收到 消息
缺点:观察者过多时,发送通知会耗时
JDK的内部实现
抽象主题类:Observable
Vector相当于List,
抽象观察者接口:Observe
使用场景:
- 当对象中存在一对多,一个对象的状态改变会影响其他对象的状态
- 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面
更多关于HarmonyOS 鸿蒙Next中观察者模式的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS Next中,观察者模式通过@Observed
和@ObjectLink
装饰器实现数据驱动UI更新。@Observed
用于标记可观察类,@ObjectLink
用于组件中引用可观察对象。当@Observed
类的属性变化时,依赖@ObjectLink
的组件会自动刷新。示例:
@Observed
class User {
name: string = '';
constructor(name: string) {
this.name = name;
}
}
@Entry
@Component
struct Index {
@ObjectLink user: User;
build() {
Text(this.user.name)
}
}
此机制替代传统回调方式,实现单向数据绑定。
更多关于HarmonyOS 鸿蒙Next中观察者模式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中实现观察者模式,可以通过以下方式:
- 使用系统提供的
EventBus
机制:
- 定义事件类继承
CommonEventPublishInfo
- 订阅者通过
CommonEventManager.subscribe()
注册 - 发布者通过
CommonEventManager.publish()
发布事件
- 自定义实现观察者模式:
// 主题接口
interface Subject {
registerObserver(observer: Observer): void;
removeObserver(observer: Observer): void;
notifyObservers(): void;
}
// 观察者接口
interface Observer {
update(data: any): void;
}
// 具体主题实现
class ConcreteSubject implements Subject {
private observers: Observer[] = [];
private state: any;
registerObserver(observer: Observer) {
this.observers.push(observer);
}
removeObserver(observer: Observer) {
const index = this.observers.indexOf(observer);
if (index > -1) {
this.observers.splice(index, 1);
}
}
notifyObservers() {
this.observers.forEach(observer => {
observer.update(this.state);
});
}
setState(newState: any) {
this.state = newState;
this.notifyObservers();
}
}
- 在HarmonyOS中特有的实现方式:
- 使用
@Observed
装饰器标记被观察对象 - 使用
@ObjectLink
或@Watch
装饰器创建观察关系 - 当被观察对象属性变化时自动触发UI更新
这种实现方式特别适合HarmonyOS的声明式UI开发范式,能高效地实现数据到UI的自动更新。