观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
public interface IHanfeizi {
public void haveBreakFast();
public void haveFun();
}
被观察者接口
public interface Observable {
public void addObserver(Observer observer);
public void deleteObserver(Observer observer);
public void notifyObservers(String context);
}
观察者接口
public interface Observer {
public void observe(String context);
}
被观察者实现类
public class Hanfeizi implements Observable, IHanfeizi {
private List<Observer> observerList = new ArrayList<>();
@Override
public void haveBreakFast() {
System.out.println("韩非子:开始吃饭了。。。");
notifyObservers("韩非子在吃饭");
}
@Override
public void haveFun() {
System.out.println("韩非子:开始娱乐了。。。");
notifyObservers("韩非子在娱乐");
}
@Override
public void addObserver(Observer observer) {
observerList.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyObservers(String context) {
for (Observer observer : observerList) {
observer.observe(context);
}
}
}
观察者1
public class Lisi implements Observer {
@Override
public void observe(String context) {
System.out.println("李斯:观察到韩非子活动,想boss汇报。");
report(context);
System.out.println("李斯汇报完毕");
}
public void report(String reportContext) {
System.out.println("李斯:报告老板,观察到韩非子活动了," + reportContext);
}
}
观察者2
public class Wangsi implements Observer {
@Override
public void observe(String context) {
System.out.println("王斯:观察到韩非子活动,+" + context);
cry(context);
System.out.println("王斯哭完了。");
}
public void cry(String context) {
System.out.println("王斯:因为" + context + "所以我伤心。。。");
}
}
场景类
public class Main {
public static void main(String[] args) {
Observer lisi = new Lisi();
Observer wangsi = new Wangsi();
Hanfeizi hanfeizi = new Hanfeizi();
hanfeizi.addObserver(lisi);
hanfeizi.addObserver(wangsi);
hanfeizi.haveBreakFast();
hanfeizi.haveFun();
}
}
运行结果如下:
韩非子:开始吃饭了。。。
李斯:观察到韩非子活动,想boss汇报。
李斯:报告老板,观察到韩非子活动了,韩非子在吃饭
李斯汇报完毕
王斯:观察到韩非子活动,+韩非子在吃饭
王斯:因为韩非子在吃饭所以我伤心。。。
王斯哭完了。
韩非子:开始娱乐了。。。
李斯:观察到韩非子活动,想boss汇报。
李斯:报告老板,观察到韩非子活动了,韩非子在娱乐
李斯汇报完毕
王斯:观察到韩非子活动,+韩非子在娱乐
王斯:因为韩非子在娱乐所以我伤心。。。
王斯哭完了。