设计模式(1)observer
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>();@Overridepublic void registObserver(MyObserver myObserver) {arrayList.add(myObserver);}@Overridepublic void removeObserver(MyObserver myObserver) {arrayList.remove(myObserver);}@Overridepublic 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;}@Overridepublic 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种设计模式全归纳