《研磨设计模式》chap12 观察者模式observer(3)例子
生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap12 观察者模式observer(3)例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
場景:不同的人收到通知處理不一樣。
public interface WatcherObserver {//被通知的方法 public void update(WaterQualitySubject subject);//設置觀察人員的職務 public void setJob(String job);// 獲取觀察人員的職務 public String getJob(); }public class Watcher implements WatcherObserver{ private String job; //職務 public void update(WaterQualitySubject subject) {//這里采用的是拉的方式System.out.println(job+"獲取到通知,當前污染級別為:"+subject.getPolluteLevel());} public String getJob() {return this.job;} public void setJob(String job) {this.job = job;} }public abstract class WaterQualitySubject {//用來保存注冊的觀察者對象 protected List<WatcherObserver> observers = new ArrayList<WatcherObserver>();//注冊觀察者對象 public void attach(WatcherObserver observer) {observers.add(observer);} public void detach(WatcherObserver observer) {observers.remove(observer);} public abstract void notifyWatchers(); //通知相應的觀察者對象 public abstract int getPolluteLevel();//獲取水質(zhì)污染的級別 }//具體的水質(zhì)監(jiān)測對象 public class WaterQuality extends WaterQualitySubject{//污染的級別,0表示正常,1表示輕度污染,2表示中度污染,3表示高度污染private int polluteLevel = 0; //獲取水質(zhì)污染的級別 public int getPolluteLevel() {return polluteLevel;}//當監(jiān)測水質(zhì)情況后,設置水質(zhì)污染的級別 public void setPolluteLevel(int polluteLevel) {this.polluteLevel = polluteLevel;//通知相應的觀察者this.notifyWatchers();}//通知相應的觀察者對象 public void notifyWatchers() {//循環(huán)所有注冊的觀察者for(WatcherObserver watcher : observers){//開始根據(jù)污染級別判斷是否需要通知,由這里總控if(this.polluteLevel >= 0){//通知監(jiān)測員做記錄if("監(jiān)測人員".equals(watcher.getJob())){watcher.update(this);}}if(this.polluteLevel >= 1){//通知預警人員if("預警人員".equals(watcher.getJob())){watcher.update(this);}}if(this.polluteLevel >= 2){//通知監(jiān)測部門領導if("監(jiān)測部門領導".equals(watcher.getJob())){watcher.update(this);}}}}public class Client {public static void main(String[] args) {//創(chuàng)建水質(zhì)主題對象WaterQuality subject = new WaterQuality();//創(chuàng)建幾個觀察者WatcherObserver watcher1 = new Watcher();watcher1.setJob("監(jiān)測人員");WatcherObserver watcher2 = new Watcher();watcher2.setJob("預警人員");WatcherObserver watcher3 = new Watcher();watcher3.setJob("監(jiān)測部門領導");//注冊觀察者subject.attach(watcher1);subject.attach(watcher2);subject.attach(watcher3);//填寫水質(zhì)報告System.out.println("當水質(zhì)為正常的時候------------------〉");subject.setPolluteLevel(0);System.out.println("當水質(zhì)為輕度污染的時候---------------〉");subject.setPolluteLevel(1);System.out.println("當水質(zhì)為中度污染的時候---------------〉");subject.setPolluteLevel(2);} }總結
以上是生活随笔為你收集整理的《研磨设计模式》chap12 观察者模式observer(3)例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《研磨设计模式》chap12 观察者模式
- 下一篇: 《研磨设计模式》chap18 状态模式s