观察者模式

/**
 * 观察者模式:就是一个发布订阅模型,有多个观察者和一个被观察者,被观察者状态改变,通知观察者
 * 特点:一个被观察者,多个观察者,被观察者有个集合存储注册的观察者,被观察者提供注册,注销,通知功能
 *此处以银行发工资为例子
 *
 */

//被观察者,银行
public class Bank {
    private Integer state;
    private List<Obsever> list;

    public Bank() {
        list=new ArrayList<>();
    }

    public void register(Obsever o){
        list.add(o);
    }

    public void removeObser(Obsever o){
        list.remove(o);
    }

    public void notifyAllObser(String message){
        for (Obsever obsever : list) {
            obsever.getMessage(message);
        }
    }
    //状态变更,通知用户
    public void changeStatus(Integer state){
        this.state=state;
        notifyAllObser("工资已经发放了");
    }
}
//观察者
public class Obsever {
    private String name;

    public Obsever(String name) {
        this.name = name;
    }

    public void getMessage(String message){
        System.out.println("尊敬的"+name+":"+message);
    }
}
public class Test {
    public static void main(String[] args) {
        Bank bank = new Bank();//被观察者
        //注册观察者
        bank.register(new Obsever("小明"));
        bank.register(new Obsever("小花"));
        bank.register(new Obsever("小光"));
        //通知观察者
        bank.changeStatus(2);


    }
}
原文地址:https://www.cnblogs.com/yangxiaohui227/p/10935473.html