设计模式—观察者模式

设计模式—观察者模式

1.概述

在对象之间定义了一对多依赖,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

2.类图

设计模式—观察者模式_第1张图片

3.角色

  • Observer :观察者,用来监听Subject。
  • Subject: 观察者观察的主题,可以注册观察者,删除观察者和当观察者观察的事情发生变化通知观察者。
  • myObserver: 观察者的具体实现类。
  • DataSubject: 具体的主题类。

4.实现

功能:当主题的data发生变化时,通知观察者,观察者输出变化后data的值。

1.Subject接口

//主题接口
public interface Subject {
     
    public void registerObserver(Observer observer);
    public void deleteObserver(Observer observer);
    public void notifyObservers();
}

2.Observer接口

//观察者接口
public interface Observer {
     
    public void update(int data);
}

3.DataSubject类

public class DataSubject implements Subject{
     
    List<Observer> Observers;
    int data;
    DataSubject(){
     
        Observers = new ArrayList<Observer>();
    }
    public void registerObserver(Observer observer) {
     
        Observers.add(observer);
    }

    public void deleteObserver(Observer observer) {
     
        Observers.remove(observer);
    }

    public void notifyObservers() {
     
        for(Observer o : Observers){
     
            o.update(data);
        }
    }
    public void setData(int data){
     
        this.data  = data;
        notifyObservers();
    }
}

4.myObserver类

public class myObserver implements Observer{
     
    Subject subject;
    myObserver(Subject subject){
     
        this.subject = subject;
        subject.registerObserver(this);
    }
    public void update(int data) {
     
        print(data);
    }
    public void print(int data){
     
        System.out.println(this.toString()+": "+data);
    }
}

5.测试

public class main {
     
    public static void main(String[] args) {
     
        DataSubject subject = new DataSubject();
        Observer observer = new myObserver(subject);
        subject.setData(10);
        subject.setData(100);
    }
}

当主题的data从0变为10,和从10变为100时,观察者感受到了变化,并输出变化后的值。
设计模式—观察者模式_第2张图片

你可能感兴趣的:(设计模式,java,设计模式)