设计模式之观察者模式

梦里梦外; 2021-09-23 14:18 431阅读 0赞

1 观察者模式

当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

2 类图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9jaGVueXUuYmxvZy5jc2RuLm5ldA_size_16_color_FFFFFF_t_70

3 代码实现

1)Observer.java

  1. public abstract class Observer {
  2. protected Subject subject;
  3. public abstract void update();
  4. }

2)AddObserver.java

  1. public class AddObserver extends Observer{
  2. public AddObserver(Subject subject){
  3. this.subject = subject;
  4. this.subject.attach(this);
  5. }
  6. @Override
  7. public void update() {
  8. System.out.println( "add value is: "
  9. + (subject.getState() + subject.getState()));
  10. }
  11. }

3)SubObserver.java

  1. public class SubObserver extends Observer{
  2. public SubObserver(Subject subject){
  3. this.subject = subject;
  4. this.subject.attach(this);
  5. }
  6. @Override
  7. public void update() {
  8. System.out.println( "sub value is: "
  9. + (subject.getState() - 5));
  10. }
  11. }

4)Subject.java

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class Subject {
  4. private List<Observer> observers
  5. = new ArrayList<Observer>();
  6. private int state;
  7. public int getState() {
  8. return state;
  9. }
  10. public void setState(int state) {
  11. this.state = state;
  12. notifyAllObservers();
  13. }
  14. public void attach(Observer observer){
  15. observers.add(observer);
  16. }
  17. public void notifyAllObservers(){
  18. for (Observer observer : observers) {
  19. observer.update();
  20. }
  21. }
  22. }

5)Test.java

  1. public class Test {
  2. public static void main(String[] args) {
  3. Subject subject = new Subject();
  4. new AddObserver(subject);
  5. new SubObserver(subject);
  6. System.out.println("add value state to 5");
  7. subject.setState(5);
  8. System.out.println("add value state to 8");
  9. subject.setState(10);
  10. }
  11. }

4 运行结果

  1. add value state to 5
  2. add value is: 10
  3. sub value is: 0
  4. add value state to 5
  5. add value is: 16
  6. sub value is: 3

#

发表评论

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

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

相关阅读

    相关 设计模式观察模式

    观察者模式 什么是观察者模式 观察者模式属于行为模式的一种,定义了对象的通用交流方式。 观察者模式定义了一对多的关系,一个对象改变了状态,则其它所有依赖

    相关 设计模式观察模式

    前言 使用场景: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟

    相关 设计模式观察模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 即目标发生更

    相关 设计模式观察模式

    定义 当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步

    相关 设计模式观察模式

     今天放假,又有时间继续啃《java设计模式》这本书了。每次学会一种设计模式内心都会有一种小小的成就感,但是懂是懂了,不知道会不会用。主要是现在没有什么项目经验,设计模式学了也

    相关 设计模式观察模式

    [上一篇:设计模式之策略模式][Link 1] 故事要从气象站说起,气象站有个WeatherData对象,这个对象负责拿到所有的气象数据(温度、湿度、气压),而气象站同时也

    相关 设计模式观察模式

    1 观察者模式 当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都

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

    > 设计模式: > > 前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案