设计模式----观察者模式通俗实例

观察者模式(一对多的依赖关系):主题对象发生变化时候,通知所有依赖该对象的观察者对象,使得观察者对象更新。

被观察的对象:主题

依赖的对象:观察者

例子:例如一个软件更新版本了,会通知用户版本更新信息

所有观察者都要实现这个观察者接口

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

    }
}

测试结果

原文地址:https://www.cnblogs.com/tk55/p/9251918.html