共計(jì) 1335 個(gè)字符,預(yù)計(jì)需要花費(fèi) 4 分鐘才能閱讀完成。
Java 觀察者模式的實(shí)現(xiàn)方法如下:
-
定義觀察者接口(Observer):觀察者接口定義了觀察者對(duì)象的更新方法,通常包括一個(gè) update() 方法來接收被觀察者的通知。
-
定義被觀察者接口(Subject):被觀察者接口定義了被觀察者的行為,包括添加、刪除和通知觀察者的方法。
-
實(shí)現(xiàn)觀察者類(具體觀察者):實(shí)現(xiàn)觀察者接口的類,具體的觀察者類可以根據(jù)需要進(jìn)行擴(kuò)展。
-
實(shí)現(xiàn)被觀察者類(具體被觀察者):實(shí)現(xiàn)被觀察者接口的類,具體的被觀察者類通常需要維護(hù)一個(gè)觀察者列表,并實(shí)現(xiàn)添加、刪除和通知觀察者的方法。
-
在具體被觀察者類中實(shí)現(xiàn)通知方法:在具體被觀察者類中實(shí)現(xiàn)通知方法,通常在該方法中遍歷觀察者列表,調(diào)用每個(gè)觀察者的更新方法。
-
在客戶端中使用觀察者模式:在客戶端中創(chuàng)建具體的觀察者和被觀察者對(duì)象,并進(jìn)行相應(yīng)的操作。
示例代碼如下:
// 定義觀察者接口
interface Observer {void update();
}
// 定義被觀察者接口
interface Subject {void addObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
// 實(shí)現(xiàn)觀察者類
class ConcreteObserver implements Observer {@Override
public void update() {System.out.println("Observer is notified");
}
}
// 實(shí)現(xiàn)被觀察者類
class ConcreteSubject implements Subject {List<Observer> observers = new ArrayList<>();
@Override
public void addObserver(Observer observer) {observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {observers.remove(observer);
}
@Override
public void notifyObservers() {for (Observer observer : observers) {observer.update();
}
}
}
public class Main {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notifyObservers();}
}
運(yùn)行以上代碼會(huì)輸出:
Observer is notified
Observer is notified
說明觀察者模式成功地將被觀察者的通知傳遞給了觀察者。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!