欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-02 23:29:50
观察者模式(一对多的依赖关系):主题对象发生变化时候,通知所有依赖该对象的观察者对象,使得观察者对象更新。 被观察的对象:主题 依赖的对象:观察者 例子:例如一个软件更新版本了,会通知用户版本更新信息 所有观察者都要实现这个观察者接口 主题抽象类,里面含有注册、删除、通知观察者 产品版本升级了,就通 ......

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

被观察的对象:主题

依赖的对象:观察者

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

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

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

    }
}

 

 

测试结果

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