设计模式—观察者模式

设计模式—观察者模式

1.概述

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

2.类图

在这里插入图片描述

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时,观察者感受到了变化,并输出变化后的值。
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值