Condivisione della tecnologia

Modello di progettazione - Modello osservatore

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. L'idea centrale del modello dell'osservatore

Il modello Observer è noto anche come modello Pubblica/Sottoscrivi. GOF definisce il modello dell'osservatore come segue: Definisce una relazione di dipendenza uno-a-molti tra gli oggetti, consentendo a più oggetti osservatore di concentrarsi sullo stesso oggetto contemporaneamente. Quando lo stato dell'oggetto cambia, tutti gli oggetti che dipendono da esso ottengono Notificato e aggiornato automaticamente.
Come mostrato nella figura seguente, il modello dell'osservatore contiene 5 tipi di oggetti.
Inserisci qui la descrizione dell'immagine

  • Interfaccia di destinazioneOggetto: L'interfaccia di destinazione definisce tre interfacce: aggiungi osservatore attach(), elimina osservatore detach() e notifica agli osservatori notifyObservers() e definisce la propria funzione operativa operazione().
  • Classe di destinazione astrattaAbstractSubject: Questa classe definisce un oggetto di raccolta vect di osservatori, che viene utilizzato per memorizzare l'elenco degli oggetti osservatore aggiunti e implementa tre funzioni da aggiornare: aggiungi osservatore attach(), elimina osservatore detach() e notifica agli osservatori notifyObservers() Anche questo elenco notifica a tutti gli oggetti osservatore di aggiornarsi.
  • Classe di destinazione specifica MySubiect: Eredita dalla classe di destinazione astratta AbstractSubiect e scrive una funzione operativa specifica per implementare operazione(). In questa funzione, notifyObservers() può essere chiamato per notificare a tutti gli osservatori di aggiornarsi.
  • Interfaccia dell'osservatore Osservatore: Definisce un'interfaccia unificata update() per gli oggetti che devono essere avvisati quando la classe di destinazione cambia. Quando viene chiamato notifyObservers(), la funzione update() verrà chiamata per aggiornarsi.
  • osservatore concreto : È possibile definire più oggetti osservatore, come Observer1 e Observer2, per scrivere funzioni di aggiornamento unificate. Client Test può implementare il monitoraggio aggiungendo un osservatore Observer alla classe Oggetto.

Diamo un'occhiata all'implementazione specifica.

(1) Interfaccia Observer Observer.java definisce un'interfaccia di aggiornamento unificata update(). Il suo codice sorgente è mostrato nel seguente programma.

package behavior.observer;


/**
* @author Minggg
* 观察者接口
*/
public interface Observer {

	public void update();
}

(2) La classe di implementazione dell'osservatore Observer1.java è un'implementazione specifica di un osservatore e la sua funzione di aggiornamento viene utilizzata per inviare una stringa alla console. Il suo codice sorgente è mostrato nel seguente programma.

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {

	public void update(){ 
		System.out.println("观察者1得到通知!");
	}
}

(3) La classe di implementazione dell'osservatore Observer2.java è un'implementazione specifica di un altro osservatore e la sua funzione di aggiornamento viene utilizzata per inviare una stringa alla console. Il suo codice sorgente è mostrato nel seguente programma.

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {

	public void update(){ 
		System.out.println("观察者2得到通知!");
	}
}

(4) L'interfaccia osservata Object.java definisce tre funzioni di interfaccia per gli osservatori operativi e definisce un'interfaccia di funzione operativa specifica per rappresentare le proprie funzioni. Il suo codice sorgente è mostrato nel seguente programma.

package behavior.observer;


/**
* @author Minggg
* 被观察者接口
*/
public interface Subject {

	// 增加观察者
	public void attach(Observer observer);
	// 删除观察者
	public void detach(Observer observer);
	// 通知所有观察者
	public void notifyObservers();
	// 自身的操作接口
	public void operation();
}

(5) La classe astratta osservata AbstractSubject.java fornisce un vettore di elenco vettoriale per salvare tutti gli oggetti dell'osservatore e scrivere funzioni di implementazione per gestire gli oggetti dell'elenco. Il suo codice sorgente è mostrato nel seguente programma.

package behavior.observer;

import java.util.Enumeration;
import java.util.Vector;


/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {

	private Vector