1、概述
观察者模式:当对象之间定义一对多的依赖,这样一来,当一个对象状态改变时,依赖他的对象都会收到通知,并且自动更新
2、场景
比如我们遇到一个聊天室的需求,当聊天室中某个人发送一条消息时,聊天室里的每个人都要接收到这条消息,其中,聊天室成员作为观察者接收聊天室的消息,聊天室则作为被观察者通知聊天室成员
3、代码
1、被观察者接口
public interface ISubject {
/*
* 增加订阅者
* */
void attach(IObserver observer);
/*
* 减少订阅者
*
* */
void detach(IObserver observer);
/*
* 通知订阅者
* */
void notifyObjs(String msg);
}
2、聊天室实现类
public class ChatSubject implements ISubject {
private List
observers = new ArrayList<>();
@Override
public void attach(IObserver observer) {
// TODO Auto-generated method stub
observers.add(observer);
}
@Override
public void detach(IObserver observer) {
// TODO Auto-generated method stub
observers.remove(observer);
}
@Override
public void notifyObjs(String msg) {
// TODO Auto-generated method stub
for(IObserver observer:observers){
observer.update(msg);
}
}
}
3、观察者接口
public interface IObserver {
void update(String msg);
}
4、用户观察者实现类
public class UserObserver implements IObserver {
private String uname;
public UserObserver(String uname) {
super();
this.uname = uname;
}
@Override
public void update(String msg) {
System.out.println(uname+"收到了一条消息:"+msg);
}
}
5、测试类
public class Test {
public static void main(String[] args) {
/*
* 定义聊天室
* */
ISubject subject = new ChatSubject();
/*
* 用户A加入
* */
IObserver observerA = new UserObserver("用户A");
subject.attach(observerA);
/*
* 用户B加入
* */
IObserver observerB = new UserObserver("用户B");
subject.attach(observerB);
/*
* 用户A发送一条消息
* */
subject.notifyObjs("大家好");
}
}