观察者模式

观察者模式是一种类似广播的设计模式,通常用于多个对象需要接收同一个消息时使用,里面会包含两个类型的成员。第一个是观察者:观察或这订阅某个消息。第二个是被观察者:用于发布消息。

/**
 * @创建者 lucas
 * @创建时间 2018/3/16 0016 16:56
 * @描述 观察者模式
 */


//观察者抽象类--假设是网虫学生
interface Observer {
    //通知回调
    void notify(String msg);
}

//创建一个被观察者--假设是宿舍舍长,他是开黑组织者
class Subscriber {
    private static Subscriber instance = new Subscriber();

    //开黑报名的学生
    private List<Observer> mObserverList = new ArrayList<>();
    
    public static Subscriber getInstance() {
        return instance;
    }
    
    //报名入口
    public void register(Observer observer){
        if (!mObserverList.contains(observer))
            mObserverList.add(observer);
    }
    
    //怕挨打,我要退出组织
    public void unregister(Observer observer){
        if (mObserverList.contains(observer))
            mObserverList.remove(observer);
    }
    
    //放学了
    public void classesOver(){
        //舍长:我得赶紧通知同学去网吧抢位置
        for (Observer observer : mObserverList) {
            observer.notify("放学了,腿快则有,腿慢则无,跑的快的帮我也占个位置^_^");
        }
    }
}

class AStudent implements Observer {
    //最后一节课了,我得向舍长报个名
    void sign(){
        Subscriber.getInstance().register(this);
    }

    @Override
    public void notify(String msg) {
        Log.d("AStudent", "收到消息,冲啊");
    }
}

class BStudent implements Observer {
    //最后一节课了,我得向舍长报个名
    void sign(){
        Subscriber.getInstance().register(this);
    }

    @Override
    public void notify(String msg) {
        Log.d("AStudent", "收到消息,冲啊");
    }
}

public class ObserverMode {
    void test(){
        //同学甲
        AStudent aStudent = new AStudent();
        BStudent bStudent = new BStudent();
        //报名
        aStudent.sign();
        bStudent.sign();
        //放学了
        Subscriber.getInstance().classesOver();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值