观察者模式是指在对象之间,存在的一(被观察者)对多(观察者)的依赖关系,当被观察者的状态发生变化,依赖它的观察者会收到通知并自动更新。
观察者模式对观察者和被观察者进行解耦,可以单独对观察者或被观察者进行操作而互不影响。
模式包含四个角色:
1、抽象被观察者角色:
2、抽象观察者角色:
3、具体被观察者角色:
4、具体观察者角色:
/**
* 抽象被观察者
*/
public interface Observeree {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver();
}
/**
* 抽象观察者
*/
public interface Observer {
public void update(String message);
}
/**
* 具体被观察者,实现Observeree接口,并对方法进行实现
*/
public class WechatServer implements Observeree{
private List<Observer> list;
private String message;
public WechatServer(){
list = new ArrayList<Observer>();
}
@Override
public void registerObserver(Observer o) {
if(!list.contains(o)){
list.add(o);
}
}
@Override
public void removeObserver(Observer o) {
if(list.contains(o)){
list.remove(o);
}
}
@Override
public void notifyObserver() {
for(Observer o : list){
o.update(message);
}
}
public void setInfo(String msg){
this.message = msg;
System.out.println("服务更新消息:"+msg);
notifyObserver();
}
}
public class User implements Observer{
private String name;
private String message;
public User(String name){
this.name = name;
}
@Override
public void update(String message) {
this.message = message;
}
public void read(){
System.out.println(name + " receive the message: "+message);
}
}
转载地址: