1. 观察者模式
1.1 关于
定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
1.2 程序样例
定义事件接口:
public interface Event {
List<Listener> listeners = Lists.newCopyOnWriteArrayList();
default void addListener(Listener listener) {
listeners.add(listener);
}
default void removeListener(Listener listener) {
listeners.remove(listener);
}
default void publish() {
for (Listener listener : listeners) {
listener.onEvent(this);
}
}
}
定义监听器接口:
public interface Listener<E extends Event> {
void onEvent(E event);
}
定义具体事件,磁盘使用情况事件:
@Data
public class DiskUsageEvent implements Event {
private String message;
}
定义具体监听器,磁盘使用情况到达一定比例发送邮件:
@Slf4j
public class MailListener implements Listener<DiskUsageEvent> {
@Override
public void onEvent(DiskUsageEvent event) {
System.out.println("邮件监听收到消息,准备发送邮件:" + event.getMessage());
}
}
测试:
public class Test {
public static void main(String[] args) {
// 实例化事件
DiskUsageEvent event = new DiskUsageEvent();
event.setMessage("磁盘使用情况达到预警");
// 实例化监听器
MailListener mailListener = new MailListener();
BackupListener backupListener = new BackupListener();
// 事件添加监听
event.addListener(mailListener);
event.addListener(backupListener);
// 发布事件
event.publish();
}
}