设计模式之观察者模式

设计模式之观察者模式,第1张

主体对象
package com.observer;

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

/**
 * @author yangmin
 * @version 1.0
 * @description: 观察者模式中被观察的对象
 * @date 2022/4/21 11:50
 */
public class Subject {
    /**
     * 观察者监听的对象
     */
    private int stat;
    /**
     * 观察该对象的观察者结合
     */
    private List<Oberver> oberverList= new ArrayList<Oberver>();;

    /**
     * 当该对象的状态改变的时候,唤醒所有的观察者去执行响应的任务
     * @param stat
     */
    public void setStat(int stat) {
        this.stat = stat;
        notifyAllObservers();
    }

    public int getStat() {
        return stat;
    }

    /**
     * 添加被观察者
     * @param oberver
     */
    public void add(Oberver oberver) {
        oberverList.add(oberver);
    }

    /**
     * 唤醒所有的观察者
     */
    public void notifyAllObservers() {
        oberverList.forEach(oberver -> oberver.handel());
    }
}

观察者的父类
package com.observer;

/**
 * @author yangmin
 * @version 1.0
 * @description: 观察者的父类
 * @date 2022/4/21 11:56
 */
public abstract class Oberver {
    /**
     * 要观察的主体对象
     */
    protected Subject subject;

    /**
     * 当主体的对象发生变化的时候观察者要执行的处理方法
     */
    public abstract void handel();
}

三个观察者子类 子类一
package com.observer;

/**
 * @author yangmin
 * @version 1.0
 * @description: TODO
 * @date 2022/4/21 12:02
 */
public class ObserverSon1 extends Oberver {

    /**
     * 创建对象的时候,把自己添加到被观察的对象中
     */
    public ObserverSon1(Subject subject) {
        this.subject = subject;
        this.subject.add(this);
    }

    @Override
    public void handel() {
        System.out.println("son1");
    }
}

子类二
package com.observer;

/**
 * @author yangmin
 * @version 1.0
 * @description: TODO
 * @date 2022/4/21 12:02
 */
public class ObserverSon2 extends Oberver {

    /**
     * 创建对象的时候,把自己添加到被观察的对象中
     */
    public ObserverSon2(Subject subject) {
        this.subject = subject;
        this.subject.add(this);
    }

    @Override
    public void handel() {
        System.out.println("son2");
    }
}

子类三
package com.observer;

/**
 * @author yangmin
 * @version 1.0
 * @description: TODO
 * @date 2022/4/21 12:02
 */
public class ObserverSon3 extends Oberver {

    /**
     * 创建对象的时候,把自己添加到被观察的对象中
     */
    public ObserverSon3(Subject subject) {
        this.subject = subject;
        this.subject.add(this);
    }

    @Override
    public void handel() {
        System.out.println("son3");
    }
}

测试
package com.observer;

/**
 * @author yangmin
 * @version 1.0
 * @description: TODO
 * @date 2022/4/21 12:05
 */
public class Main {

    public static void main(String[] args) {
        Subject subject = new Subject();
        new ObserverSon1(subject);
        new ObserverSon2(subject);
        new ObserverSon3(subject);
        subject.setStat(1);
    }
}

输出结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/731107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存