设计模式--观察者模式

2020-04-22  本文已影响0人  caoww

前言:
观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是GUI系统(Graphical User Interface 即图形用户界面)、订阅——发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了。

观察者模式

观察者模式的分类 -- 推模型和拉模型

代码实现

写一个简单的demo Tom要搞事情,准备偷一台三桑note7,由于Tom经常偷东西,被警察和很多人盯着,当Tom偷到了三桑note7,就被盯着他的人发现了,交给了警察了

    /**
     * 被观察者,抽象主题
     */
public interface Subject<T> {

    /**
     * 注册一个观察者
     * @param o
     */
    void registerObserver(Observer<T> o);

    /**
     * 通知观察者
     * @param t
     */
    void notifyObserver(T t);
    
    /**
     * 在你需要的时候调用这个方法,防止内存泄露
     */
    void removeObserver();
}


    /**
     * 观察者
     */
public interface Observer<T> {

    /**
     * 被观察者触发更新
     * @param t
     */
    void update(T t);
}
    /**
     * 要搞事情的Tom
     */
public class Tom<T> implements Subject<T> {
    Observer<T> o;

    /**
     * 发布信息 ,搞事情
     */
    public void publishEvent(T t) {
        if (o == null)
            throw new NullPointerException("you must register Observer first!");
        System.out.println("tom 开始搞事情");
        notifyObserver(t);
    }

    /**
     * 通知订阅者,通知长眼睛的,Tom搞事情
     */
    @Override
    public void notifyObserver(T t) {
        o.update(t);
    }

    /**
     * 注册一个观察者,长眼睛的已经开始蹲点
     */
    @Override
    public void registerObserver(Observer<T> o) {
        this.o = o;
    }

    /**
     * 在你需要的时候调用这个方法,防止内存泄露
     */
    @Override
    public void removeObserver() {
        this.o = null;
    }
}
 public static void main(String[] args) {
        // 要搞事情的人 Tom 来了
        Tom<String> tom = new Tom<>();

        /**
         * 观察者  长眼睛的
         */
        People people = new People() {
            @Override
            public void discover() {
                System.out.println("tom搞事情被发现了,交给警察了");
            }
        };
        // 注册观察者   听说tom要搞事情,引起了长眼睛的注意了
        tom.registerObserver(people);
        tom.publishEvent("Tom偷到了一台三桑note7"); // 开始搞事情
    }

模式总结

上一篇 下一篇

猜你喜欢

热点阅读