首页 > 代码库 > 观察者模式
观察者模式
观察者模式
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 @Override4 public void update() {5 System.out.println("1111111111111111");6 }7 8 }
ConcreteObserver2(观察者实例2)
1 public class ConcreteObserver2 implements Observer {2 3 @Override4 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 @Override12 public void detach(Observer observer) {13 list.remove(observer);14 }15 16 @Override17 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();
运行后的结果是:
观察者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。