观察者模式
观察者模式也叫发布定义模式。
当一个类想要知道另一个类的信息在某个条件下才出现的信息时;
如果不用观察者模式只能让这个类引用另一个类,并且不断地去判断这个类信息;
就比如你不知道一家店什么时候才会开门,你只能在门口等待;
而观察者模式,是将你等待店开门,转变店通知你。
也就是你不需要一直获取另一个类的信息,你只需要让另一个类通知这个类即可;
public class Test {
public static void main(String[] args) {
Target target = new TargetInstance("目标");
//订阅目标
target.add(new ObserverInstance("观察者1"));
target.add(new ObserverInstance("观察者2"));
//目标通知观察者
target.notifyObserver();
}
}
//目标抽象类
abstract class Target{
protected String name;
protected List<Observer> observers =new LinkedList<>();
//订阅方法
public void add(Observer observer){
observer.req(name);
observers.add(observer);
}
//取消订阅
public void remove(Observer observer){
observers.remove(observer);
}
public abstract void notifyObserver();
}
//目标实现类
class TargetInstance extends Target{
public TargetInstance(String name) {
this.name = name;
}
@Override
public void notifyObserver() {
System.out.println(name+"开始通知别人了-->");
for (Observer observer : observers) {
observer.resp(name);
}
}
}
// 观察者接口
interface Observer{
void resp(String msg);
void req(String name);
}
//观察者实现类
class ObserverInstance implements Observer{
private String name;
public ObserverInstance(String name) {
this.name = name;
}
@Override
public void resp(String msg) {
System.out.println(name+"收到了"+msg+"的信息");
}
@Override
public void req(String name) {
System.out.println(this.name+"订阅了"+name+"的信息");
}
}