观察者模式
public interface Observer {
<T>void response(T t);
}
public class abstract Subject {
private List<Observer> observers = new ArrayList<>();
public void registerObserver(Observer observer){
observers.add(observer);
}
public void removeObserver(Observer observer){
observers.remove(observer);
}
public abstract void notifyObserver();
}
public class ConcreteSubject extends Subject{
private String field;
public void setField(field){
this.field = field;
}
public String getField(){
return this.field;
}
public void notifyObserver(){
System.out.println("具体目标发生改变...");
System.out.println("--------------");
observers.forEach(item->{
item.response(this);
});
}
}
public class ConcreteSubject1 extends Subject{
private String field;
public void setField(field){
this.field = field;
}
public String getField(){
return this.field;
}
public void notifyObserver(){
System.out.println("具体目标发生改变...");
System.out.println("--------------");
observers.forEach(item->{
item.response(this);
});
}
}
public class ConcreteObserver1 implements Observer{
public <T>void respone(T t){
Field[] fields = t.getClass.getDeclaredFields();
System.out.println("ConcreteObserver1做出响应");
}
}
public class ConcreteObserver2 implements Observer{
public <T>void respone(T t){
Field[] fields = t.getClass.getDeclaredFields();
System.out.println("ConcreteObserver2做出响应");
}
}
public class Client{
public static void main(Stirng[] args){
Subject subject = ConcreteSubject();
Subject subject1 = ConcreteSubject1();
subject.registerObserver(new ConcreteObserver1());
subject.registerObserver(new ConcreteObserver2());
subject.notifyObserver();
subject1.registerObserver(new ConcreteObserver1());
subject1.registerObserver(new ConcreteObserver2());
subject1.notifyObserver();
}
}