观察者模式
观察者模式
对象间存在一对多关系时,使用观察者模式.
当一个对象被修改时,会自动通知依赖它的对象,观察者模式属于行为模式
如何解决
抽象类里有一个ArrayList存放观察者们
观察者和被观察者是抽象耦合的,
代码样例
1.抽象Listener接口
interface Listener<T> {
void onMessage(T t);
}
EmailListener实现类
class EmailListener<String> implements Listener<String> {
@Override
public void onMessage(String msg) {
System.out.println("EmailListener onMessage" + msg);
}
}
TimlineListener实现类
class TimLineListener<String> implements Listener<String> {
@Override
public void onMessage(String msg) {
System.out.println("TimlineListener onMessage" + msg);
}
}
2.抽象subject接口,主题
interface Subject<T> {
void add(Listener listener); // 添加listener
void del(Listener listener); // 删除listener
void notifyListeners(T t); // 通知监听者
void operation(String message);
}
抽象父类abstractSubject
abstract static class AbstractSubject<T> implements Subject<T> {
private CopyOnWriteArrayList<Listener> listeners = new CopyOnWriteArrayList<>();
@Override
public void add(Listener listener) {
listeners.add(listener);
}
@Override
public void del(Listener listener) {
listeners.remove(listener);
}
@Override
public void notifyListeners(T t) {
Iterator<Listener> iterator = listeners.stream().iterator();
while (iterator.hasNext()){
iterator.next().onMessage(t);
}
}
}
主题实现类MySubject
class MySubject extends AbstractSubject {
@Override
public void operation(String message) {
System.out.println(message + "already update");
String result = message + "already update";
notifyListeners(result);
}
}
2.使用
public static void main(String[] args) {
Subject subject = new MySubject();
subject.add(new EmailListener());
subject.add(new TimLineListener());
subject.operation("3");
}
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-11-04 排查inode被打满的问题
2021-11-04 python3.6环境安装
2016-11-04 AnsibleAPI源码剖析(1)-Runner类的 初始化