欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java觀察者模式和發布訂閱模式的區別

謝彥文1年前8瀏覽0評論

Java中有兩種常見的事件模式:觀察者模式和發布訂閱模式。這兩種模式都是用來處理對象之間的交互的,但是它們有些不同之處。

觀察者模式

public interface Observer {
void update(Observable o, Object arg);
}
public class Observable {
private List<Observer> observers = new ArrayList<Observer>();
public synchronized void addObserver(Observer o) {
if (!observers.contains(o)) {
observers.add(o);
}
}
public void notifyObservers(Object arg) {
Object[] arrLocal;
synchronized (this) {
arrLocal = observers.toArray();
}
for (int i = arrLocal.length-1; i>=0; i--) {
((Observer)arrLocal[i]).update(this, arg);
}
}
}

發布訂閱模式

public interface Subscriber {
void onMessage(Event event);
}
public interface Publisher {
void addSubscriber(Subscriber subscriber);
void removeSubscriber(Subscriber subscriber);
void notifySubscribers(Event event);
}
public class EventPublisher implements Publisher {
private List<Subscriber> subscribers = new ArrayList<Subscriber>();
public void addSubscriber(Subscriber subscriber) {
subscribers.add(subscriber);
}
public void removeSubscriber(Subscriber subscriber) {
subscribers.remove(subscriber);
}
public void notifySubscribers(Event event) {
for (Subscriber subscriber : subscribers) {
subscriber.onMessage(event);
}
}
}

區別

首先,觀察者模式的核心是觀察者(Observer)和可觀察對象(Observable)。觀察者對象會訂閱可觀察對象的事件。當可觀察對象發生改變時,會通知所有的觀察者對象,這樣他們就可以處理這個事件。

而發布訂閱模式的核心是發布者(Publisher)和訂閱者(Subscriber)。發布者對象會維護一份所有的訂閱者的列表,當發布者發生事件時,它會通知所有的訂閱者對象,這些訂閱者對象也可以處理這個事件。

觀察者模式和發布訂閱模式在實現上有一些差異。在觀察者模式中,可觀察對象通常會直接調用觀察者對象的更新方法(update()),而在發布訂閱模式中,發布者對象只會通知訂閱者對象,而不會直接調用它們的方法。

此外,觀察者模式還有一個Observable類,它是Java中的一個標準類。而發布訂閱模式沒有一個標準類,實現方式多種多樣。