[英]How to implement observer pattern with generics?
我正在制作一個餐廳應用程序,我需要在其中使用 Generics 類型參數。 工作流程如下:客戶端(觀察者)訂購食物(接口),FoodFactory 返回具體類型(如熱狗、薯條等),然后客戶端(觀察者)收到有關它的通知。 在這個練習中我需要使用一些類。 在本練習中,類型參數<E>
是Food 。 摘要 class 可觀察:
public abstract class Observable<E>{
List<Observer<E>> observers = new ArrayList<>();
public void abbObserver(Observer <E> e){
observers.add(e);
}
public void notifyObservers(E e){
for(Observer observer : observers){
observer.update(this);
}
}
}
這個class被Order
Class繼承。
public class Order<E> extends Observable<E> {
private FoodName food;
private List<FoodName> extras;
public Order(FoodName food, List<FoodName> extras) {
this.food = food;
this.extras = extras;
}
public FoodName getFood() {
return food;
}
public List<FoodName> getExtras() {
return extras;
}
@Override
public void abbObserver(Observer<E> e) {
super.abbObserver(e);
}
@Override
public void notifyObservers(E e) {
System.out.println("Notifying Observers of: " + e.toString());
}
但是我不確定我該怎么做。 我是否需要繼承List<Observer<E>> observers = new ArrayList<>();
也? 我通常錯過了這個主題,我最近才了解到,但是我不明白這些對象如何相互通信。
我認為你的意思是:
public class FoodName {
private final String name;
public FoodName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Order extends Observable<FoodName> {
private FoodName food;
private List<FoodName> extras = new ArrayList<>();
public Order(FoodName food, List<FoodName> extras) {
this.food = food;
this.extras = extras;
}
public FoodName getFood() {
return food;
}
public List<FoodName> getExtras() {
return extras;
}
public void addExtras(FoodName extra) {
extras.add(extra);
notifyObservers(extra);
}
}
public interface Observer<E> {
void update(E e);
}
public class Main {
public static void main(String[] args) {
Order order = new Order(new FoodName("bigmac"), new ArrayList<>());
order.abbObserver(fn -> System.out.println(fn.getName()));
order.addExtras(new FoodName("french fries"));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.