代码详解设计模式--观察者模式

傷城~ 2022-03-15 07:06 299阅读 0赞

观察者模式

  观察者模式中,当一个对象被修改时,会自动通知它的依赖对象。

  • 优点:
  1. 观察者和被观察者是抽象耦合的;
  2. 建立了一套触发机制。

    • 缺点:
  3. 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

  4. 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。

UML

  1. // 被观察者
  2. public class Subject {
  3. private List<Observer> observers = new ArrayList<Observer>();
  4. private int state;
  5. public int getState() {
  6. return state;
  7. }
  8. public void setState(int state) {
  9. this.state = state;
  10. notifyAllObservers();
  11. }
  12. public void attach(Observer observer){
  13. observers.add(observer);
  14. }
  15. public void notifyAllObservers(){
  16. for (Observer observer : observers) {
  17. observer.update();
  18. }
  19. }
  20. }
  21. // 观察者抽象类
  22. public abstract class Observer {
  23. protected Subject subject;
  24. public abstract void update();
  25. }
  26. // 二进制观察者实体类
  27. public class BinaryObserver extends Observer{
  28. public BinaryObserver(Subject subject){
  29. this.subject = subject;
  30. this.subject.attach(this);
  31. }
  32. @Override
  33. public void update() {
  34. System.out.println(Integer.toBinaryString(subject.getState()));
  35. }
  36. }
  37. // 八进制观察者实体类
  38. public class OctalObserver extends Observer{
  39. public OctalObserver(Subject subject){
  40. this.subject = subject;
  41. this.subject.attach(this);
  42. }
  43. @Override
  44. public void update() {
  45. System.out.println(Integer.toOctalString(subject.getState()));
  46. }
  47. }
  48. // 使用示例
  49. public class Demo {
  50. public static void main(String[] args) {
  51. Subject subject = new Subject();
  52. new BinaryObserver(subject);
  53. new OctalObserver(subject);
  54. subject.setState(15);
  55. subject.setState(10);
  56. }
  57. }

发表评论

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

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

相关阅读

    相关 设计模式-观察模式

    观察者模式 引言 > 今天开车出去有事,还挺赶时间的,突然遇到了一个红灯,这红灯时间可真长,等了好久终于看到变绿灯了,赶紧开车过去。 正文 观察者模式是指多

    相关 设计模式-观察模式

    观察者模式也叫订阅发布模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

    相关 设计模式:观察模式

    一.简介 > QT的信号槽就是观察者模式,当事件发生之后(比如按钮被点击)就会发出一个信号,这种信号类似广播没有目的.当对象对信号感兴趣,就会通过 connect() 函

    相关 设计模式--观察模式

    定义 在对象之间定义了一对多的依赖,当一方发生改变时,依赖它的对象都会受到通知并自动更新。 其实可以理解为消息发布者(被观察者)与订阅者(观察者),用户可以订阅或者取消