观察者抽象类:Observer.java
观察者具体实现类1:StockObserver.java
观察者具体实现类2:NBAObserver.java
被观察者抽象类:Subject.java
被观察者具体实现类:Secretary.java
测试类:Client.java
- 被观察者维护有观察者的一份列表,当被观察者的状态发生变化时,遍历观察者列表以通知他们
Observer.java
package com.pattern.test.observer;
public abstract class Observer {
protected String name;
protected Subject subjet;
public Observer(String name, Subject subjet) {
this.name = name;
this.subjet = subjet;
}
public abstract void update();
}
StockObserver.java
package com.pattern.test.observer;
public class StockObserver extends Observer{
public StockObserver(String name, Subject subjet) {
super(name, subjet);
}
@Override
public void update() {
System.out.println(subjet.subjectState + " " + name + "别看股票了");
}
}
NBAObserver.java
package com.pattern.test.observer;
public class NBAObserver extends Observer{
public NBAObserver(String name, Subject subjet) {
super(name, subjet);
}
@Override
public void update() {
System.out.println(subjet.subjectState + " " + name + "别看NBA了");
}
}
Subject.java
package com.pattern.test.observer;
import java.util.ArrayList;
import java.util.List;
public abstract class Subject {
protected List<Observer> observers = new ArrayList<Observer>();
protected String subjectState;
public abstract void attach(Observer observer);
public abstract void detach(Observer observer);
public abstract void notice();
}
Secretary.java
package com.pattern.test.observer;
public class Secretary extends Subject {
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notice() {
for (Observer observer : observers) {
observer.update();
}
}
}
Client.java
package com.pattern.test.observer;
public class Client {
public static void main(String[] args) {
Secretary secretary = new Secretary();
StockObserver stockObserver = new StockObserver("张三", secretary);
NBAObserver nbaObserver = new NBAObserver("李四", secretary);
secretary.attach(stockObserver);
secretary.attach(nbaObserver);
secretary.subjectState = "老板回来";
secretary.notice();
}
}
来源:https://blog.csdn.net/weixin_42053328/article/details/102775299