观察者模式:通过观察者订阅被观察者,在被观察者发生改变的时候通知观察者,不需要观察者一直等候。用通俗一点的语言说当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下载地址:点击这里哦