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


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

被觀察的對象:主題

依賴的對象:觀察者

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

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

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

    }
}

 

 

測試結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM