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

java觀察者模式和監聽者模式

錢多多1年前6瀏覽0評論

Java中的觀察者模式和監聽者模式都是常用的設計模式,用于實現對象之間的通信。它們的設計思想都是“觀察者”(或“監聽者”)對象觀察(或監聽)主體對象,一旦主體對象發生變化,就通知觀察者(或“監聽者”)對象,讓它們采取相應的行動。

觀察者模式實現了“一對多”的關系,即一個主體對象可以有多個觀察者對象,主體對象發生變化時,所有的觀察者對象都會得到通知。下面是一個Java實現觀察者模式的示例代碼:

// 主體對象
public class Subject {
private ArrayListobservers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
// 觀察者對象
public interface Observer {
void update();
}
// 具體觀察者對象
public class ConcreteObserver implements Observer {
private String name;
private Subject subject;
public ConcreteObserver(String name, Subject subject) {
this.name = name;
this.subject = subject;
subject.attach(this);
}
public void update() {
System.out.println(name + " received notification from subject.");
}
public void detach() {
subject.detach(this);
}
}

監聽者模式也是實現對象之間的通信,但其與觀察者模式不同的是,監聽者模式中只有一個監聽者對象監聽主體對象,主體對象發生變化時,就通知監聽者對象。下面是一個Java實現監聽者模式的示例代碼:

// 主體對象(被監聽者)
public class Subject {
private ArrayListlisteners = new ArrayList<>();
public void addListener(EventListener listener) {
listeners.add(listener);
}
public void removeListener(EventListener listener) {
listeners.remove(listener);
}
public void doSomething() {
System.out.println("Subject do something.");
notifyListeners(new EventObject(this));
}
public void notifyListeners(EventObject event) {
for (EventListener listener : listeners) {
listener.handleEvent(event);
}
}
}
// 監聽者對象
public interface EventListener {
void handleEvent(EventObject event);
}
// 具體監聽者對象
public class ConcreteListener implements EventListener {
@Override
public void handleEvent(EventObject event) {
System.out.println("ConcreteListener received event: " + event.toString());
}
}

在實際開發中,觀察者模式和監聽者模式都得到了廣泛應用,如Spring開發框架中的事件監聽、Android開發中的廣播機制等都采用了觀察者或監聽者模式。如何選擇哪種模式,取決于項目需求和實際情況。