这里有新鲜出炉的Java函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要帮助大家轻松掌握Java观察者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。
特点:
1、观察者和被观察者是抽象耦合的。
2、建立一套触发机制。
企业级开发和常用框架中的应用:Java自带观察者类,servlet中的filter,分布式的消息队列
实例:
- public class Demo {
- public static void main(String[] args) {
- ActualSubject subject = new ActualSubject();
- ObserverA o1 = new ObserverA();
- ObserverA o2 = new ObserverA();
- ObserverA o3 = new ObserverA();
- //订阅消息
- subject.addObserver(o1);
- subject.addObserver(o2);
- subject.addObserver(o3);
- subject.setNews("今天天气真好");
- }
- }
- /**
- * 观察者接口
- */
- interface Observer {
- public void update(Subject subject);
- }
- /**
- * 目标对象,广播对象
- */
- class Subject {
- private List < Observer > list = new ArrayList < >();
- public void addObserver(Observer o) {
- list.add(o);
- }
- public void removeObserver(Observer o) {
- list.remove(o);
- }
- public void notifyAllObserver() {
- for (Observer o: list) {
- o.update(this);
- }
- }
- }
- class ActualSubject extends Subject {
- private String news;
- public void setNews(String news) {
- this.news = news;
- System.out.println("我是广播,我发出了一个消息");
- notifyAllObserver();
- }
- public String getNews() {
- return news;
- }
- }
- class ObserverA implements Observer {
- private String news;
- public void update(Subject subject) {
- setNews(((ActualSubject) subject).getNews());
- System.out.println("我是观察者,我接收到一个我订阅的广播发出的消息,接下来我要做出响应的操作");
- System.out.println(getNews());
- }
- public String getNews() {
- return news;
- }
- public void setNews(String news) {
- this.news = news;
- }
- }
来源: http://www.phperz.com/article/17/1112/359860.html