JAVA设计模式之观察者模式

刺骨的言语ヽ痛彻心扉 2022-03-18 11:46 298阅读 0赞

观察者模式的定义:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新

类似于发布订阅,订阅了主题对象的改动信息,自己则受到通知并作出自己的应对

原理图:

1272523-20171113100406343-149515793.png

具体实现:

定义观察者接口:观察者定义一个收到被观察对象改变时调用的方法

  1. package pers.ly.learn.designModel.observer;
  2. public interface IObserver {
  3. public void change(String info);
  4. }

定义观察者实现类:

  1. package pers.ly.learn.designModel.observer;
  2. public class Observer implements IObserver {
  3. private String name;
  4. public Observer(String name) {
  5. super();
  6. this.name = name;
  7. }
  8. @Override
  9. public void change(String info) {
  10. System.out.println("观察者:" + this.name +"收到Subject改动信息:" + info +" 正在做出应对...");
  11. }
  12. }

定义一个主题接口:该主题支持新增观察者,删除观察者,和通知观察者三个方法

  1. package pers.ly.learn.designModel.observer;
  2. public interface ISubject {
  3. void addObserver(IObserver obsr);
  4. void removeObserver(IObserver obsr);
  5. void notifyObserver();
  6. }

定义主题接口实现类:该实现类中定义observers 集合保存观察者/删除对象,调用观察者change方法则可通知观察者,info则是通知观察者的消息

  1. package pers.ly.learn.designModel.observer;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Subject implements ISubject {
  5. private List<IObserver> observers = new ArrayList<IObserver>();
  6. private String info;
  7. @Override
  8. public void addObserver(IObserver obsr) {
  9. observers.add(obsr);
  10. }
  11. @Override
  12. public void removeObserver(IObserver obsr) {
  13. if(observers.contains(obsr)) {
  14. observers.remove(obsr);
  15. }
  16. }
  17. @Override
  18. public void notifyObserver() {
  19. if(!observers.isEmpty() && observers.size()>0) {
  20. for (IObserver iObserver : observers) {
  21. iObserver.change(info);
  22. }
  23. }
  24. }
  25. public void change(String info) {
  26. this.info = info;
  27. System.out.println("Subject对象change方法被调用:" + info);
  28. notifyObserver();
  29. }
  30. }

测试代码:

  1. package pers.ly.learn.designModel.observer;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Observer o1 = new Observer("O1");
  5. Observer o2 = new Observer("O2");
  6. Observer o3 = new Observer("O3");
  7. Subject su =new Subject();
  8. su.addObserver(o1);
  9. su.addObserver(o2);
  10. su.addObserver(o3);
  11. su.change("今晚加班!");
  12. su.removeObserver(o3);
  13. su.change("明晚不加班!");
  14. }
  15. }

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 设计模式观察模式

    一、了解观察者模式 1.1 什么是观察者模式 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。 典型的问

    相关 JAVA设计模式观察模式

    1、初步认识 观察者模式的定义:   在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 大白话:   其实就是