设计模式——观察者模式

观察者模式:通过观察者订阅被观察者,在被观察者发生改变的时候通知观察者,不需要观察者一直等候。用通俗一点的语言说当b站上面看到一个非常好看的连载番的时候,非常非常喜欢,当番剧更新的时候想第一时间去看,这个时候怎么办呢,总不可能时时刻刻刷新吧,这个时候你就需要追番了,点击追番,在番剧更新的时候回第一时间推送给你,你不用时时刻刻关注你的番是否更新了,推送给你了你就去看就可以了。这个时候,番剧(被观察者)就被你(观察者)订阅了,当番剧更新就推送给你,这样你就完成了一个观察者模式了。

 

观察者模式的基本实现

 1、定义观察者和被观察者接口

观察者接口:

public interface BaseObserver {

    /**
     * 接受观察者发送的消息
     * @param message
     */
    void receiveMessage(String message);
}

被观察者接口:

public interface BaseObservable {

    /**
     * 添加观察者
     *
     * @param observer
     */
    void addObserver(BaseObserver observer);
    /**
     * 移除观察者
     *
     * @param observer
     */
    void removeObserver(BaseObserver observer);
    /**
     * 发布消息,提示所以观察着
     *
     * @param string
     */
     void publishTheNews(String string) ;

}
 

2、实现接口

观察者实现(创建追番人的熟悉)

public class FansBilibiliAnimeObserver implements BaseObserver {

    //观察者的名称,id,唯一标识符等等
    private String name;

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

    //被观察者发送到观察者的方法,用于番剧更新时通知追番的人
    @Override
    public void receiveMessage(String animeName) {
        Log.e("FansBilibiliAnime", name + "收到更新的动漫为:" + animeName);
    }
}

实现被观察者接口

 

/**
 * 被观察者创建(创建你喜欢的番剧)
 */

public class BilibiliAnimeObservable implements BaseObservable {


    private List<BaseObserver> observerList;

    //单利模式
    private static BilibiliAnimeObservable startObservable;

    private BilibiliAnimeObservable() {
        observerList = new ArrayList<>();
    }

    public static BilibiliAnimeObservable getStartObservable() {

        if (startObservable == null) {
            synchronized (BilibiliAnimeObservable.class) {
                if (startObservable == null) {
                    startObservable = new BilibiliAnimeObservable();
                }
            }
        }
        return startObservable;

    }


    @Override
    public void addObserver(BaseObserver observer) {
        observerList.add(observer);
    }

    @Override
    public void removeObserver(BaseObserver observer) {
        observerList.remove(observer);
    }
    @Override
    public void publishTheNews(String string) {
        for (BaseObserver observer : observerList) {
            observer.receiveMessage(string);
        }

    }

}

3、订阅和通知(你点击追番,然后番剧更新通知你)

 订阅(点击追番)

/**
     * 创建粉丝(观察者)并且将粉丝添加到明星(被观察者)中
     */
    private void add() {

        //创建观察者(创建追番的人)
        FansBilibiliAnimeObserver observer = new FansBilibiliAnimeObserver("追番者1");
        FansBilibiliAnimeObserver observer1 = new FansBilibiliAnimeObserver("追番者2");
        FansBilibiliAnimeObserver observer2 = new FansBilibiliAnimeObserver("追番者3");

        //订阅(点击追番)
        BilibiliAnimeObservable.getStartObservable().addObserver(observer);
        BilibiliAnimeObservable.getStartObservable().addObserver(observer1);
        BilibiliAnimeObservable.getStartObservable().addObserver(observer2);
        //你等等的番剧创作中,你在忙成的等待中………………
        //………………
        //更新啦,赶快去看吧……
        BilibiliAnimeObservable.getStartObservable().publishTheNews("五等分的新娘");

    }

开启你的追番模式啊

github下载地址:点击这里哦

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值