如果addListener方法調用時檢查重複的註冊?如果是這樣,發現重複時會發生什麼?註冊Java事件時,通常允許重複偵聽器嗎?
final public class exampleCanFire {
public void addFooListener(FooListener listener) {
// Before adding listener to private list of listeners, should I check for duplicates?
}
}
儘管我不知道從圖書館設計的角度看,答案是肯定的,圖書館唯一一致的做法是註冊所有聽衆(包括重複內容)?否則,如果兩個不同的子系統偶然註冊了同一個監聽器,那麼第一個註銷它將會弄亂另一個子系統 - 對嗎? – 2009-08-24 09:23:55
它會像收到每個事件兩次一樣,因爲其他人重新註冊您的監聽器。 – Zed 2009-08-24 09:26:07
@Zed:是的,但我認爲那是不小心組合了兩個子系統的人的錯。它必須是組合無關「對等」子系統以瞭解它們將如何相互作用的人的責任 - 因爲替代方案是讓每個子系統知道如何與當前存在或可能存在的每個其他無關「對等」子系統交互未來,這是不可行的。 – 2009-08-24 11:22:04