美文网首页Java设计模式
观察者模式:observer

观察者模式:observer

作者: lconcise | 来源:发表于2018-10-22 23:03 被阅读13次

观察者模式中有主题(Subject)和观察者(Observer),它定义了对象之间的一对多的依赖关系,当主题状态发生变化时,所有观察者都会收到通知并且自动更新。
简单来说,它类似于邮件订阅,当我们订阅了该文章,如果后续有更新,会及时通知你。

捕获.PNG

示例代码:

/**
 * 观察者.
 */
public interface Observer {
    void update();
}
/**
 * 观察者实现类 Observer01.
 */
public class Observer01 implements Observer{
    @Override
    public void update() {
        System.out.println("Observer01 has received");
    }
}
/**
 * 观察者实现类 Observer02.
 */
public class Observer02 implements Observer{
    @Override
    public void update() {
        System.out.print("Observer02 has received");
    }
}
/**
 * 主题(被观察者).
 */
public interface Subject {
    /**
     * 增加观察者.
     *
     * @param observer 观察者.
     */
    void add(Observer observer);

    /**
     * 删除观察者.
     *
     * @param observer 观察者
     */
    void delete(Observer observer);

    /**
     * 通知所有观察者.
     */
    void notifyToAll();

    /**
     * 自身的操作.
     */
    void operation();
}
/**
 * 主题(被观察者).
 */
public abstract class AbstractSubject implements Subject {
    /**
     * 存储观察者.
     */
    private Vector<Observer> vector = new Vector();

    @Override
    public void add(Observer observer) {
        vector.add(observer);
    }

    @Override
    public void delete(Observer observer) {
        vector.remove(observer);
    }

    @Override
    public void notifyToAll() {
        Enumeration<Observer> enumeration = vector.elements();
        while (enumeration.hasMoreElements()) {
            enumeration.nextElement().update();
        }
    }
}
/**
 * 主题(被观察者)实现类.
 */
public class MySubject extends AbstractSubject {
    @Override
    public void operation() {
        System.out.println("subject do operation ");
        // 通知所有观察者
        notifyToAll();
    }
}

测试:

public class ObserverTests {

    public static void main(String[] args) {
        // 创建 主题(被观察者)
        Subject mySubject =new MySubject();

        // 创建观察者
        Observer observer01 = new Observer01();
        Observer observer02 = new Observer02();

        // 主题(被观察者) 与 观察者确立关系 (一对多)
        mySubject.add(observer01);
        mySubject.add(observer02);
        
        mySubject.operation();
    }
}

测试结果:


image.png

相关文章

  • Android 开发--观察者模式

    观察者 模式 有两个 角色,观察者observer ,被观察者observable。 Observer 是个接口,...

  • 设计模式之观察者模式

    观察者模式 Observer Intro 观察者模式又叫做 发布订阅(Publish/Subscribe)模式,观...

  • 行为型模式——观察者模式

    观察者模式定义 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象...

  • c++观察者模式

    1.观察者模式简介    观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)...

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • 设计模式之观察者模式

    观察者模式定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/Subscrib...

  • JS观察者模式简介及实例

    一、概念观察者(observer)模式:又称订阅/发布(subscriber/publisher)模式,被观察者(...

  • 行为型设计模式总结

    观察者模式 Observer模式作用是当一个对象发生变化时,能够自动通知它的观察者刷新状态。Observer模式提...

  • 设计模式——观察者模式

    观察者模式的定义 观察者模式(Observer Pattern)也叫发布订阅模式(Publish/subscrib...

网友评论

    本文标题:观察者模式:observer

    本文链接:https://www.haomeiwen.com/subject/vgsgzftx.html