您现在的位置是:首页 > 文章详情

观察者设计模式

日期:2018-08-26点击:542

在被观察者类中保存有一份观察者名单,在某些业务逻辑执行的时候,会调用观察者的通知接口

  1. 观察者接口IObserver
package pattern.observer;

/**
 * 观察者接口
 */
public interface IObserver {
    void handleSome(String message);
}

2.观察者实现类ObserverFirst,ObserverSecond

package pattern.observer;

/**
 * 第一个观察者
 */
public class ObserverFirst implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}



package pattern.observer;

/**
 * 第二个观察者
 */
public class ObserverSecond implements IObserver {
    @Override
    public void handleSome(String message) {
        System.out.println(this.getClass().getSimpleName() + "正在处理【" + message + "】");
    }
}
  1. 被观察者接口IObserverable
package pattern.observer;

import java.util.ArrayList;

/**
 * 被观察者接口
 */
public interface IObserverable {
    /**
     * 添加观察者
     */
    void addObserver(IObserver iObserver);

    /**
     * 删除观察者
     */
    void removeObserver(IObserver iObserver);

    /**
     * doSome,被观察者观察的方法
     */
    void doSome(String some);

    /**
     * 观察者列表
     */
    ArrayList<IObserver> observerList();
}
  1. 被观察者实现类Observerable
package pattern.observer;

import java.util.ArrayList;

public class Observerable implements IObserverable {
    ArrayList<IObserver> observers;

    public Observerable() {
        observers = new ArrayList<>();
    }

    /**
     * 添加观察者
     */
    public void addObserver(IObserver iObserver) {
        observers.add(iObserver);
    }

    /**
     * 删除观察者
     */
    public void removeObserver(IObserver iObserver) {
        observers.remove(iObserver);
    }

    /**
     * doSome,被观察者观察的方法
     */
    public void doSome(String message) {
        for (IObserver observer : observers) {
            observer.handleSome(message);
        }
    }

    /**
     * 观察者列表
     */
    public ArrayList<IObserver> observerList() {
        return observers;
    }
}
  1. 测试
package pattern.observer;

import org.apache.commons.lang.StringUtils;

class MainClass {
    public static void main(String[] args) {
        /**
         * 观察者一号
         */
        IObserver first = new ObserverFirst();
        /**
         * 观察者二号
         */
        IObserver second = new ObserverSecond();

        /**
         * 被观察者
         */
        IObserverable observerable = new Observerable();
        /**
         * 被观察者添加观察者
         */
        observerable.addObserver(first);
        observerable.addObserver(second);

        /**
         * 被观察者执行业务逻辑
         */
        observerable.doSome("左转");

        System.out.println(StringUtils.repeat("=", 30));

        /**
         * 从观察者列表中删除第一个观察者
         */
        observerable.removeObserver(first);
        observerable.doSome("直行");
    }
}

结果;

ObserverFirst正在处理【左转】
ObserverSecond正在处理【左转】
==============================
ObserverSecond正在处理【直行】
原文链接:https://yq.aliyun.com/articles/644969
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章