观察者模式
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
观察者模式UML图
观察者模式代码
package com.roc.observer;
/**
* 通知者抽象者
* @author liaowp
*
*/
public interface Message { public void Add(Observer observer);//增加观察者 public void delete(Observer observer);//删除观察者 public void notice();
}
package com.roc.observer; import java.util.ArrayList;
import java.util.List; public class EmailMessage implements Message{ private List<Observer> observers=new ArrayList<Observer>(); public void Add(Observer observer) {
observers.add(observer); } public void delete(Observer observer) {
observers.remove(observer);
} public void notice() {
for (Observer observer : observers) {
observer.notice();
}
} }
package com.roc.observer;
/**
* 抽象观察者
* @author liaowp
*
*/
public interface Observer { public void notice(); }
package com.roc.observer;
/**
* 具体观察者
* @author liaowp
*
*/
public class Observer1 implements Observer{ @Override
public void notice() {
System.out.println("observer1收到推送");
} }
package com.roc.observer;
/**
* 观察者模式
* @author liaowp
*
*/
public class Client {
public static void main(String[] args) {
Message message=new EmailMessage();//邮件 具体的通知
message.Add(new Observer1());//要通知的人
message.notice();
}
}
观察者模式适应场景
1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。