观察者模式

public interface Observer {
    public void update(String state);
}
public class Subject {
    //保存注册的观察者对象
    private List<Observer> mObserver = new ArrayList<>();

    //注册观察者对象
    public void attach(Observer observer){
        mObserver.add(observer);
        System.out.println("注册"+observer);
    }

    //注销观察者对象
    public void detach(Observer observer){
        mObserver.remove(observer);
        System.out.println("注销"+observer);
    }

    //通知所有注册的观察者对象
    public void notifyEvenOne(String newStade){
         for (Observer observer:mObserver){
             observer.update(newStade);
         }
    }
}

public class ConcreteSubject extends Subject {
    private String state;

    public String getState() {
        return state;
    }

    public void change(String newState){
        this.state = newState;
        System.out.println("通知状态发生改变");
        notifyEvenOne(state);
    }
}

public class ObserverA implements Observer {

    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        System.out.println( "接收到消息:" + newState + ";我是A模块,快来抢吧!!");
    }
}
public class ObserverB implements Observer {
    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        System.out.println( "接收到消息:" + newState + ";我是B模块,快来抢吧!!");
    }
}
public class ObserverC implements Observer {
    //观察者状态
    private String observerState;

    @Override
    public void update(String newState) {
        //更新观察者状态,让它与目标状态一致
        observerState = newState;
        System.out.println( "接收到消息:" + newState + ";我是C模块,快来抢吧!!");
    }
}
    public static void main(String [] arg){

        ConcreteSubject concreteSubject = new ConcreteSubject();
        concreteSubject.attach(new ObserverA());
        concreteSubject.attach(new ObserverB());
        concreteSubject.attach(new ObserverC());
        int s = 0;
        while (true){

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            concreteSubject.change("ccc"+s);
            s++;
        }
        
    }

6.输出结果
通知状态发生改变
接收到消息:ccc210;我是A模块,快来抢吧!!
接收到消息:ccc210;我是B模块,快来抢吧!!
接收到消息:ccc210;我是C模块,快来抢吧!!
通知状态发生改变
接收到消息:ccc211;我是A模块,快来抢吧!!
接收到消息:ccc211;我是B模块,快来抢吧!!
接收到消息:ccc211;我是C模块,快来抢吧!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值