public abstract class Subject {
protected String status;
protected String name;
protected final List<Observer> observers = new ArrayList<>();
public Subject(String name){
this.name = name;
}
protected void add(Observer observer){
observers.add(observer);
}
protected void remove(Observer observer){
observers.remove(observer);
}
protected void notificAll(){
for (Observer o : observers) {
o.update();
}
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
3. 创建观察者抽象类或者接口
public interface Observer {
void update();
}
4. 创建具体通知者对象
public class Secretary extends Subject{
public Secretary(String name) {
super(name);
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
5. 创建具体观察者对象
1.对象1
public class StockObserver implements Observer{
private String name;
private Subject subject;
public StockObserver(Subject subject,String name){
this.subject = subject;
this.name = name;
}
@Override
public void update() {
System.out.println(subject.name +":"+ subject.getStatus());
System.out.println(name+" 关闭股票行情,继续工作");
}
}
2.对象2
public class NBAObserver implements Observer{
private String name;
private Subject subject;
public NBAObserver(Subject subject,String name){
this.subject = subject;
this.name = name;
}
@Override
public void update() {
System.out.println(subject.name +":"+ subject.getStatus());
System.out.println(name+" 关闭NBA球赛,继续工作");
}
}
6.测试
@org.junit.Test
public void test(){
Subject sub = new Secretary("小蜜");
Observer observer1 = new StockObserver(sub,"乐成");
Observer observer2 = new NBAObserver(sub,"三皮");
sub.add(observer1);
sub.add(observer2);
sub.setStatus("老板回办公室了");
sub.notificAll();
}