Java之设计模式之 Observer 观察者
程序员文章站
2022-06-17 09:30:19
...
观察者设计模式
Java 已经实现了该模式,并且提供了使用类。
之实现之一是 Java 原生提供的 java.util 包下的 Observer 和 Observable 类。
下面介绍这两个类的用法:
java.util.Observer
- 观察者。实现该接口后,能够接收到来自被观察者因改动而发出的通知。
update() 方法,会被 Observable 调用。
java.util.Observable
- 被观察者。
setChanged() 方法来 设置 change 为 true
notifyObservers() 方法向观察者发送信息。
下面的例子中,News 对象是被两个 Reader 观察。
package com.concretepage.util; import java.util.Observable; import java.util.Observer; // First observer class FirstNewsReader implements Observer { public void update(Observable obj, Object arg) { System.out.println("FirstNewsReader got The news:"+(String)arg); } } //Second Observer class SecondNewsReader implements Observer { public void update(Observable obj, Object arg) { System.out.println("SecondNewsReader got The news:"+(String)arg); } } // This is the class being observed. class News extends Observable { void news() { String[] news = {"News 1", "News 2", "News 3"}; for(String s: news){ //set change setChanged(); //notify observers for change notifyObservers(s); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Error Occurred."); } } } } //Run Observer and Observable class ObserverObservableDemo { public static void main(String args[]) { News observedNews = new News(); FirstNewsReader reader1 = new FirstNewsReader(); SecondNewsReader reader2 = new SecondNewsReader(); observedNews.addObserver(reader1); observedNews.addObserver(reader2); observedNews.news(); } } /** OUT PUT: SecondNewsReader got The news:News 1 FirstNewsReader got The news:News 1 SecondNewsReader got The news:News 2 FirstNewsReader got The news:News 2 SecondNewsReader got The news:News 3 FirstNewsReader got The news:News 3 */
引用请注明,
原文出处:https://lixh1986.iteye.com/blog/2442417
-