举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > JAVA观察者模式实现 Java 观察者模式

JAVA观察者模式实现 Java 观察者模式

2023-03-25 06:18 Java教程

JAVA观察者模式实现 Java 观察者模式

JAVA观察者模式实现

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

Java中实现观察者模式有两种方法:一是使用java.util.Observable和java.util.Observer;二是使用java.util.EventListener。

// 使用 java.util.Observable 和 java.util.Observer 实现 Java 观察者模式 
public class MySubject extends Observable{ 

    public void doSomething(){ 
        System.out.println("MySubject doSomething"); 

        // 通知所有的观察者 
        this.setChanged(); 

        // 通知所有的观察者,表示 MySubject 状态发生了改变 
        this.notifyObservers(); 

    } 
}  
public class Observer1 implements Observer{  

    @Override  
    public void update(Observable o, Object arg) {  

        System.out.println("observer1 has received!");  

    }  
}  
public class Observer2 implements Observer{  

    @Override  
    public void update(Observable o, Object arg) {  

        System.out.println("observer2 has received!");  

    }  
}     

Java 观察者模式

Java设计模式 - 观察者模式


观察者模式用于在一个对象被修改时通知其相关对象。

观察者模式是一种行为模式类别。

例子

import java.util.ArrayList;
import java.util.List;

class MyValue {
   private List<Observer> observers 
      = new ArrayList<Observer>();
   private int state;

   public int getState() {
      return state;
   }

   public void setState(int state) {
      this.state = state;
      notifyAllObservers();
   }

   public void attach(Observer observer){
      observers.add(observer);    
   }

   public void notifyAllObservers(){
      for (Observer observer : observers) {
         observer.update();
      }
   }   
}
abstract class Observer {
   protected MyValue subject;
   public abstract void update();
}
class PrinterObserver extends Observer{
   public PrinterObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println("Printer: " + subject.getState() ); 
   }
}
class EmailObserver extends Observer{

   public EmailObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
     System.out.println("Email: "+ subject.getState() ); 
   }
}
class FileObserver extends Observer{

   public FileObserver(MyValue subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println("File: " + subject.getState()); 
   }
}

public class Main {
   public static void main(String[] args) {
      MyValue subject = new MyValue();

      new FileObserver(subject);
      new EmailObserver(subject);
      new PrinterObserver(subject);

      subject.setState(15);
  
      subject.setState(10);
   }
}

上面的代码生成以下结果。

阅读全文
以上是编程学为你收集整理的JAVA观察者模式实现 Java 观察者模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部