1. 程式人生 > >設計模式----觀察者模式通俗實例

設計模式----觀察者模式通俗實例

接口 pack ceo 軟件 依賴關系 http In array value

觀察者模式(一對多的依賴關系):主題對象發生變化時候,通知所有依賴該對象的觀察者對象,使得觀察者對象更新。

被觀察的對象:主題

依賴的對象:觀察者

例子:例如一個軟件更新版本了,會通知用戶版本更新信息

所有觀察者都要實現這個觀察者接口

package com.ij34.observer;
   /*
    * 所有觀察者都要實現這個觀察者接口
   */

public interface Observer
{
    void update(Observable o , Object text);
}

主題抽象類,裏面含有註冊、刪除、通知觀察者

package
com.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版本");

    }
}

測試結果

技術分享圖片

設計模式----觀察者模式通俗實例