定义
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
UML
实现
1.观察者接口
package com.zqr.design.observerPattern;
/**
* 观察者接口
* @ClassName: Observer
*/
public interface Observer{
/**
* 接收信息
* @Title: receive
*/
public void receive(String msg);
}
2.具体的观察者
package com.zqr.design.observerPattern;
/**
* 具体的观察者,可接收信息
* @ClassName: ConcreteObserver
*/
public class ConcreteObserver implements Observer{
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void receive(String msg) {
System.out.println(name+":"+msg);
}
}
3.被观察者
package com.zqr.design.observerPattern;
/**
* 被观察者:抽象类Subject
* @ClassName: Subject
*/
public interface Subject {
/**
* 添加观察者
* @Title: add
*/
public void add(Observer observer);
/**
* 删除观察者
* @Title: delete
*/
public void delete(Observer observer);
/**
* 通知观察者
* @Title: notify
*/
public void notify(String msg);
}
4.具体的被观察者
package com.zqr.design.observerPattern;
import java.util.ArrayList;
import java.util.List;
/**
* 具体的被观察者
* @ClassName: ConcreteSubject
*/
public class ConcreteSubject implements Subject{
//持有观察者集合
private List<Observer> observers = new ArrayList<Observer>();
@Override
public void add(Observer observer) {
observers.add(observer);
}
@Override
public void delete(Observer observer) {
observers.remove(observer);
}
@Override
public void notify(String msg) {
//使每个观察者都更新自己接收消息
for (Observer observer : observers) {
observer.receive(msg);
}
}
}
5.Test