观察者模式
观察者模式
1.观察者模式可以打个简单比方如:
大家看报纸,定了商报。商报是subject而订阅者是observer,当商报有新的消息的时候就出版报纸给订阅者来让他们获取消息。
也就是:定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
2.UML图
3.代码说明:
Subject(主题接口):
1 public interface Subject { 2 // 添加观察者 3 public void attach(Observer observer); 4 5 // 移除观察擦着 6 public void detach(Observer observer); 7 8 void notifyObservers(); 9 }
Observer(观察者接口):
1 public interface Observer { 2 3 void update(); 4 5 }
ConcreteObserver1(观察者实例1)
1 public class ConcreteObserver1 implements Observer { 2 3 @Override 4 public void update() { 5 System.out.println("1111111111111111"); 6 } 7 8 }
ConcreteObserver2(观察者实例2)
1 public class ConcreteObserver2 implements Observer { 2 3 @Override 4 public void update() { 5 System.out.println("222222222222222"); 6 } 7 8 }
ConcreteSubject:
1 public class ConcreteSubject implements Subject { 2 //装要获取消息的观察者 3 private List<Observer> list = new ArrayList<Observer>(); 4 5 @Override 6 public void attach(Observer observer) { 7 8 list.add(observer); 9 } 10 11 @Override 12 public void detach(Observer observer) { 13 list.remove(observer); 14 } 15 16 @Override 17 public void notifyObservers() { 18 for (int i = 0; i < list.size(); i++) { 19 list.get(i).update(); 20 } 21 22 } 23 24 }
运行代码:
1 ConcreteSubject concreteSubject = new ConcreteSubject(); 2 concreteSubject.attach(new ConcreteObserver1()); 3 concreteSubject.attach(new ConcreteObserver2()); 4 concreteSubject.notifyObservers();
运行后的结果是: