Padrão do observador
1. O conceito de modo de observador
O conceito do padrão do observador é muito bom aqui
Quando há um relacionamento um-para-muitos entre os objetos, o padrão do observador (Padrão Observer) é usado. Por exemplo, quando um objeto é modificado, seus objetos dependentes serão notificados automaticamente. O padrão do observador é um padrão comportamental.
Intento: Definir uma relação de dependência um-para-muitos entre os objetos. Quando o estado de um objeto muda, todos os objetos que dependem dele são notificados e atualizados automaticamente.
A principal solução: o problema de notificar outros objetos quando o estado de um objeto muda, e a facilidade de uso e o baixo acoplamento devem ser considerados para garantir um alto grau de colaboração.
Quando usar: Quando o estado de um objeto (objeto alvo) muda, todos os objetos dependentes (objetos observadores) serão notificados e notificados por broadcast.
Como resolver: usando a tecnologia orientada a objetos, essa dependência pode ser enfraquecida.
Código-chave: há um ArrayList na classe abstrata para armazenar os observadores.
2. Implementação de código Java
interface Observer{
void handleMessage(String msg);
}
class ObserverOne implements Observer{
public ObserverOne(Subject subject) {
subject.attach(this);
}
@Override
public void handleMessage(String msg) {
System.out.println(this.getClass().getName()+"接收到消息:"+msg);
}
}
class ObserverTwo implements Observer{
public ObserverTwo(Subject subject) {
subject.attach(this);
}
@Override
public void handleMessage(String msg) {
System.out.println(this.getClass().getName()+"接收到消息:"+msg);
}
}
class Subject{
private List<Observer> observerList;
public Subject() {
this.observerList = new ArrayList<>();
}
public void attach(Observer observer){
this.observerList.add(observer);
}
public void boardcast(String msg){
for (Observer observer:observerList){
observer.handleMessage(msg);
}
}
}
public class ObserverDemo {
public static void main(String[] args) {
Subject subject=new Subject();
Observer observer1=new ObserverOne(subject);
Observer observer2=new ObserverTwo(subject);
subject.boardcast("广播消息");
}
}
resultado da operação:
com.yize.offer.ObserverOne接收到消息:广播消息
com.yize.offer.ObserverTwo接收到消息:广播消息