概念:定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
核心:一个对象的改变需要同时改变其他对象的时候考虑观察者
注意对观察者和通知者进行抽象(依赖倒置)
观察者结构图
java代码
public class ObserverTest {public static void main(String[] args) {//生成通知者Observer observer = new StockObserver();Observer observer2 = new NBAObserver();//生成观察者Subject subject = new Boss();subject.name = "老板";observer.subject = subject;observer2.subject= subject;subject.Attach(observer);subject.Attach(observer2);//通知subject.Notify();}}//观察者public abstract class Subject {String name = "";public abstract void Attach(Observer observer);public abstract void Detach(Observer observer);abstract void Notify();}//老板观察者public class Boss extends Subject {private List<Observer> observers = new ArrayList<>();@Overridepublic void Attach(Observer observer) {observers.add(observer);}@Overridepublic void Detach(Observer observer) {observers.remove(observer);}@Overridepublic void Notify() {for (Observer observer : observers) {observer.Update();}}}//通知者public abstract class Observer {String name;Subject subject;public abstract void Update();}//观看NBA的通知者public class NBAObserver extends Observer {@Overridepublic void Update() {System.out.println(subject.name + "通知,关闭了NBA比赛,继续工作");}}//观看股票的通知者public class StockObserver extends Observer {@Overridepublic void Update() {System.out.println(subject.name + "通知,关闭股票行情,继续工作!");}}
针对不同的通知方法名字,不能使用接口,因为名称不同,可以使用委托
委托(不理解)
声明一个委托,名称叫“EventHandler”,无参数,无返回值
void EventHandler();
