設計模式----觀察者模式通俗實例
阿新 • • 發佈:2018-07-02
接口 pack ceo 軟件 依賴關系 http In array value
觀察者模式(一對多的依賴關系):主題對象發生變化時候,通知所有依賴該對象的觀察者對象,使得觀察者對象更新。
被觀察的對象:主題
依賴的對象:觀察者
例子:例如一個軟件更新版本了,會通知用戶版本更新信息
所有觀察者都要實現這個觀察者接口
package com.ij34.observer; /* * 所有觀察者都要實現這個觀察者接口 */ public interface Observer { void update(Observable o , Object text); }
主題抽象類,裏面含有註冊、刪除、通知觀察者
packagecom.ij34.observer; import java.util.ArrayList; import java.util.List; import java.util.Iterator; /* * 主題抽象類,裏面含有註冊、刪除、通知觀察者 */ public abstract class Observable { List<Observer> list = new ArrayList<Observer>(); public void registObserver(Observer o) { list.add(o); }public void removeObserver(Observer o) { list.remove(o); } public void notifyObservers(Object value) { for (Observer o : list) { o.update(this , value); } } }
產品版本升級了,就通知觀察者
package com.ij34.observer; /* * 產品setter更改了,就通知軟件所有訂閱的人(觀察者),繼承Observable類,使用notifyObservers方法*/ public class Product extends Observable { private String version; public Product(){} public Product(String version) { this.version=version; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; notifyObservers(version); } }
軟件版本觀察者
package com.ij34.observer; /* * 當有新的版本時候,通過setter來觸發該觀察者類VersionObserver */ public class VersionObserver implements Observer{ @Override public void update(Observable o, Object text) { if(text instanceof String){ System.out.println("軟件已有新版本:"+text); } } }
測試
package com.ij34.observer; public class Test { public static void main(String[] args) { Product p=new Product(); VersionObserver vo=new VersionObserver(); p.registObserver(vo); p.setVersion("第2018版本"); } }
測試結果
設計模式----觀察者模式通俗實例