2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το μοτίβο του Observer είναι επίσης γνωστό ως μοτίβο Δημοσίευσης/Εγγραφής. Το GOF ορίζει το μοτίβο του παρατηρητή ως εξής: Ορίστε μια σχέση εξάρτησης ένα προς πολλά μεταξύ των αντικειμένων, επιτρέποντας σε πολλαπλά αντικείμενα παρατηρητή να εστιάζουν στο ίδιο αντικείμενο ταυτόχρονα Όταν αλλάζει η κατάσταση του αντικειμένου, όλα τα αντικείμενα που εξαρτώνται από αυτό Ενημερώνεται και ενημερώνεται αυτόματα.
Όπως φαίνεται στο παρακάτω σχήμα, το μοτίβο του παρατηρητή περιέχει 5 τύπους αντικειμένων.
Ας δούμε τη συγκεκριμένη υλοποίηση.
(1) Διασύνδεση παρατηρητή Το Observer.java ορίζει μια ενοποιημένη ενημέρωση διεπαφής ενημέρωσης(). Ο πηγαίος κώδικας του εμφανίζεται στο παρακάτω πρόγραμμα.
package behavior.observer;
/**
* @author Minggg
* 观察者接口
*/
public interface Observer {
public void update();
}
(2) Η κλάση υλοποίησης παρατηρητή Observer1.java είναι μια συγκεκριμένη υλοποίηση ενός παρατηρητή και η συνάρτηση ενημέρωσης χρησιμοποιείται για την έξοδο μιας συμβολοσειράς στην κονσόλα. Ο πηγαίος κώδικας του εμφανίζεται στο παρακάτω πρόγραμμα.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {
public void update(){
System.out.println("观察者1得到通知!");
}
}
(3) Η κλάση υλοποίησης παρατηρητή Observer2.java είναι μια συγκεκριμένη υλοποίηση άλλου παρατηρητή και η συνάρτηση ενημέρωσης χρησιμοποιείται για την έξοδο μιας συμβολοσειράς στην κονσόλα. Ο πηγαίος κώδικας του εμφανίζεται στο παρακάτω πρόγραμμα.
package behavior.observer;
/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {
public void update(){
System.out.println("观察者2得到通知!");
}
}
(4) Η παρατηρούμενη διεπαφή Subject.java ορίζει τρεις συναρτήσεις διεπαφής για τους λειτουργικούς παρατηρητές και ορίζει μια συγκεκριμένη διεπαφή λειτουργικής λειτουργίας για να αναπαραστήσει τις δικές της λειτουργίες. Ο πηγαίος κώδικας του εμφανίζεται στο παρακάτω πρόγραμμα.
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) Η παρατηρούμενη αφηρημένη κλάση AbstractSubject.java παρέχει ένα Vector list vect για αποθήκευση όλων των αντικειμένων παρατηρητή και εγγραφή συναρτήσεων υλοποίησης για τη λειτουργία των αντικειμένων λίστας. Ο πηγαίος κώδικας του εμφανίζεται στο παρακάτω πρόγραμμα.
package behavior.observer;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {
private Vector