example:
微信订阅号
用户1 注册到 订阅号上,用户2 注册到 订阅号上,
订阅号,发通知给每一个用户。
1. 订阅号需要实现 regiser 功能,把user 添加到 list 里,之后可以通知给你一个用户 update函数,类似回调给用户
package com.example.observe;
public interface Subject {
void registObserver (MyObserver myObserver);
void removeObserver (MyObserver myObserver);
void notifyObserver();
}
package com.example.observe;
import java.util.ArrayList;
import java.util.List;
public class ObjectForSubject implements Subject {
private List<MyObserver> arrayList= new ArrayList<MyObserver>();
@Override
public void registObserver(MyObserver myObserver) {
arrayList.add(myObserver);
}
@Override
public void removeObserver(MyObserver myObserver) {
arrayList.remove(myObserver);
}
@Override
public void notifyObserver() {
arrayList.forEach(item ->item.update("hello all"));
}
}
User 需要实现 update 回调:
package com.example.observe;
public interface MyObserver {
public void update (String msg);
}
package com.example.observe;
import android.util.Log;
public class ObserverImp implements MyObserver {
private static String TAG = MyObserver.class.getSimpleName() + "LIU";
private String id;
public ObserverImp(String id) {
this.id = id;
}
@Override
public void update(String msg) {
Log.d(TAG, "Myobserver" + msg + "id =" + this.id);
}
}
实现调用代码:
ObjectForSubject objectForSubject = new ObjectForSubject();
ObserverImp observerImp1 = new ObserverImp("1");
ObserverImp observerImp2 = new ObserverImp("2");
objectForSubject.registObserver(observerImp1);
objectForSubject.registObserver(observerImp2);
objectForSubject.notifyObserver();
log:
2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =1
2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =2
android example:
类似于 android broadcast 的处理方式
register myReceiver.
when intent comming, then notify all recevier.
参考:
设计模式 观察者模式 以微信公众服务为例_微服务 观察者模式 通知所有服务-CSDN博客
GitHub - youlookwhat/DesignPattern: 📚 Java 23种设计模式全归纳