设计模式——15观察者模式(Observer)

简介: 观察者模式(Observer)

15、观察者模式(Observer)
包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文最开始的那个图。观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

我解释下这些类的作用:MySubject类就是我们的主对象,Observer1和Observer2是依赖于MySubject的对象,当MySubject变化时,Observer1和Observer2必然变化。AbstractSubject类中定义着需要监控的对象列表,可以对其进行修改:增加或删除被监控对象,且当MySubject变化时,负责通知在列表内存在的对象。我们看实现代码:
一个Observer接口:
[java] view plaincopy

  1. public interface Observer {
  2. public void update();
  3. }
    两个实现类:

[java] view plaincopy

  1. public class Observer1 implements Observer {
  2. @Override
  3. public void update() {
  4. System.out.println("observer1 has received!");
  5. }
  6. }
    [java] view plaincopy
  7. public class Observer2 implements Observer {
  8. @Override
  9. public void update() {
  10. System.out.println("observer2 has received!");
  11. }
  12. }
    Subject接口及实现类:

[java] view plaincopy

  1. public interface Subject {
  2. /增加观察者/
  3. public void add(Observer observer);
  4. /删除观察者/
  5. public void del(Observer observer);
  6. /通知所有的观察者/
  7. public void notifyObservers();
  8. /自身的操作/
  9. public void operation();
  10. }
    [java] view plaincopy
  11. public abstract class AbstractSubject implements Subject {
  12. private Vector vector = new Vector();
  13. @Override
  14. public void add(Observer observer) {
  15. vector.add(observer);
  16. }
  17. @Override
  18. public void del(Observer observer) {
  19. vector.remove(observer);
  20. }
  21. @Override
  22. public void notifyObservers() {
  23. Enumeration enumo = vector.elements();
  24. while(enumo.hasMoreElements()){
  25. enumo.nextElement().update();
  26. }
  27. }
  28. }
    [java] view plaincopy
  29. public class MySubject extends AbstractSubject {
  30. @Override
  31. public void operation() {
  32. System.out.println("update self!");
  33. notifyObservers();
  34. }
  35. }

测试类:
[java] view plaincopy

  1. public class ObserverTest {
  2. public static void main(String[] args) {
  3. Subject sub = new MySubject();
  4. sub.add(new Observer1());
  5. sub.add(new Observer2());
  6. sub.operation();
  7. }
  8. }
    输出:

update self!
observer1 has received!
observer2 has received!
这些东西,其实不难,只是有些抽象,不太容易整体理解!

目录
相关文章
|
1月前
|
设计模式 监控 Java
Kotlin - 改良设计模式 - 观察者模式
Kotlin - 改良设计模式 - 观察者模式
51 3
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
20天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
22天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
36 1
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
28 3
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
36 9
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
35 2
|
2月前
|
设计模式 监控 UED
设计模式之观察者模式
【10月更文挑战第12天】 观察者模式是一种行为型设计模式,定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动更新。主要由主题(被观察者)和观察者组成,实现对象间的松耦合,广泛应用于用户界面、事件驱动系统和数据监控等领域。
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
本教程详细讲解Kotlin语法,适合深入学习。对于快速掌握Kotlin,推荐“简洁”系列教程。本文特别介绍了观察者模式,包括使用Java API和Kotlin委托属性(如Delegates.observable)实现的方法,旨在帮助开发者更高效地实现和优化观察者模式的应用。
41 3
|
2月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
35 0