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

Posted tk55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式----观察者模式通俗实例相关的知识,希望对你有一定的参考价值。

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

被观察的对象:主题

依赖的对象:观察者

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

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

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

    }
}

 

 

测试结果

技术分享图片

 

以上是关于设计模式----观察者模式通俗实例的主要内容,如果未能解决你的问题,请参考以下文章

谁能介绍一下JAVA平台开发中最长用的几种设计模式~最好是通俗一些的并且有实例的~500分酬谢

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

php设计模式之观察者模式实例代码

js设计模式之实现观察者模式实例代码

Android框架设计模式——Adapter Method

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)