我想實現一個觀察者模式在Java上。 它不會編譯,因爲notifyAll()
似乎是這裏的問題; Cannot override the final method from Object
但我沒有在代碼中放置任何'最終'或'靜態'。 我在這裏做錯了什麼?說我重寫最後的方法,但我不能找到最後的
import java.util.ArrayList;
import java.util.List;
interface Observer {
void update();
}
interface Subject {
void registerObserver(Observer o);
void deregisterObserver(Observer o);
void notifyAll();
}
// Concrete Class
class User implements Observer {
@Override
public void update() {
System.out.println("Donald Trump just tweeted, you know");
}
}
// Concrete Class
class realDonaldTrump implements Subject {
private boolean hasTweeted = false;
private ArrayList<Observer> followers = new ArrayList<Observer>();
public boolean hasTweetedIn24Hours() {
return hasTweeted;
}
public void donaldTweets(boolean hasTweeted) {
this.hasTweeted = hasTweeted;
notifyAll();
}
@Override
public void registerObserver(Observer o) {
followers.add(o);
}
@Override
public void deregisterObserver(Observer o) {
followers.remove(o);
}
@Override
public void notifyAll() {
for (Observer o: followers)
o.update();
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World");
System.out.println("Observer Pattern Demo");
realDonaldTrump tweeterAcc = new realDonaldTrump();
}
}
在接口和實現類中都將notifyAll()重命名爲noitifyObservers()。 –