标签:通用 微信 就是 main方法 依赖关系 不同 就会 use 抽象
观察者模式(又称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系。能够实现让多个观察者监听某一个对象的动态。当这个对象发布新动态的时候,会通知所有已订阅的观察者。观察者根据自己的行为来处理该通知。
在我们生活中处处存在着观察者模式(或者称为发布-订阅模式),例如:10086给移动用户发送短信、微信群聊发送消息给全体人员、微博粉丝接收明星发送的动态等。所有一对多的关系基本都可以转化为观察者模式。
想想,这两种情况:
在以上两种选择下,你为了能及时看到你的偶像发布的动态并抢个评论区沙发,你会选择哪种方案呢?是的,第一种方案就属于我们的观察者模式,它是基于事件驱动。一旦偶像发布动态这个事件发生,系统就会自动通知该偶像的观察者(也就是你)。而方案二虽然也能及时的看到偶像的动态,但是会浪费你大量时间,如果计算机来做这种事,则会占用大量时间进行CPU计算。
说了那么多,来看下订阅者模式的有关的角色吧。
下面我们用微博偶像发布动态通知用户的案例来分析观察者模式
偶像(主题)通过实现该接口,来成为一个消息发布者。
public interface Subject {
List<Observe> fans = new ArrayList<>();
void addFans(Observe fan);
void sendMsg(String msg);
}
public class Idol implements Subject {
@Override
public void addFans(Observe fan) {
this.fans.add(fan);
}
public void sendMsg(String msg) {
for (Observe fan : this.fans) fan.notify(msg);
}
}
粉丝类通过实现该接口来实现消息观察者
public interface Observe {
void notify(String msg);
}
public class User implements Observe {
private String username;
public User(String username) {
this.username = username;
}
@Override
public void notify(String msg) {
System.out.println(username + ":快看Idol发布动态了");
}
}
public static void main(String[] args) {
Idol zhouJieLun = new Idol();
User a = new User("用户A");
User b = new User("用户B");
User c = new User("用户C");
User d = new User("用户D");
zhouJieLun.addFans(a);
zhouJieLun.addFans(b);
zhouJieLun.addFans(c);
zhouJieLun.addFans(d);
zhouJieLun.sendMsg("新专辑《说好不哭》");
}
可以看到不同的用户对周杰伦发布消息后及时的做出了不同的反应。而且粉丝们也没有不停的去查询偶像有没有发布动态,而是通过偶像来通知粉丝们来看新动态。
标签:通用 微信 就是 main方法 依赖关系 不同 就会 use 抽象
原文地址:https://www.cnblogs.com/hallowode/p/12006105.html