Fork me on GitHub

Java中内置的设计模式-观察者模式

观察者模式是jdk中内置的模式,也是使用频率最为广泛的设计模式之一,著名的开源项目如RxJava、EventBus中都能够看到它的影子,甚至在跨进程通信中,我们也经常用到观察者模式

这里只举例一个使用jdk中内置观察者模式的例子:公众号发推送的例子,公众号发文章后,每个订阅该公众号的用户都会得到推送

观察者

1
2
3
4
5
6
7
8
9
10
public class User implements Observer {
private String Name;
public User(String Name) {
this.Name = Name;
}
@Override
public void update(Observable o, Object arg) {
System.out.println( Name + " 收到新推送:" + arg);
}
}

注意,update函数中的arg即为被观察者发送出的消息,在这个例子中就是公众号发出来的消息

被观察者:推送消息

1
2
3
4
5
6
public class GongZhongHao extends Observable {
public void push(String content) {
setChanged();
notifyObservers(content);
}
}

setChanged和notifyObservers两个函数要一起使用

具体使用

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String[] args) {
User user1 = new User("User1");
User user2 = new User("User2");
User user3 = new User("User3");
GongZhongHao gongZhongHao = new GongZhongHao();
gongZhongHao.addObserver(user1);
gongZhongHao.addObserver(user2);
gongZhongHao.addObserver(user3);
gongZhongHao.push("比特币大跌");
}
}

结果如下:

1.PNG