import java.util.ArrayList; import java.util.List; public class 观察者模式 { public static void main(String[] args) { Subject subjectA = new ConcreteSubject("低频"); Observer observer1 = new ConcreteObserver("张三", subjectA); Observer observer2=new ConcreteObserver("李四",subjectA); Observer observer3=new ConcreteObserver("王五",subjectA); //subjectA.Notify(); subjectA.setStatus("更新了"); } } interface Subject{ public void Attach(Observer observer);//添加观察者 public void Detach(Observer observer);//删除观察者 public void Notify();//目标发生改变时通知所有的观察者 public String getStatus(); public void setStatus(String status); } class ConcreteSubject implements Subject{ private String name; private String status; private List<Observer> list; public ConcreteSubject(String name) { status="未更新"; this.name=name; list=new ArrayList<>(); } @Override public void setStatus(String status) { this.status=status; System.out.println(name+"的状态发生改变,变化后的状态为:"+status); Notify(); } @Override public String getStatus() { return status; } @Override public void Attach(Observer observer) { list.add(observer); } @Override public void Detach(Observer observer) { list.remove(observer); } @Override public void Notify() { for(Observer observer :list) { observer.update(); } } } interface Observer{ public void update(); } class ConcreteObserver implements Observer{ private Subject subject; private String name; private String status; public ConcreteObserver(String name,Subject subject) { this.name=name; this.subject=subject; subject.Attach(this); } @Override public void update() { System.out.println(name+" 收到通知"); status=subject.getStatus(); System.out.println("改变后的状态为"+status); } }
运行结果