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

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

被觀察的對象:主題ide

依賴的對象:觀察者測試

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

全部觀察者都要實現這個觀察者接口

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

    }
}

 

 

測試結果

相關文章
相關標籤/搜索