我對標準監聽器很熟悉,在Java中。例如,如果您有一個對象集合,它可能支持一組偵聽器來處理不同的事情:CreateListener,ChangeListener,DeleteListener。每種方法都有一個傳遞受影響對象列表的方法(例如objectChange)。使用此集合的應用程序可以通過實現和註冊偵聽器來註冊其中的一個或多個應用程序。當事件發生在集合中的對象時,就會調用適當的偵聽器。多事件監聽器的設計
但是,如果有一些這些事件類型,可能類似但有所不同。相反,要定義一個有很多方法的偵聽器類是否有意義。例如:
class EventListener
{
void objectsCreatedA(Object[] newObjects);
void objectsCreatedB(Object[] newObjects);
void objectsCreatedC(Object[] newObjects);
void objectsChangedA(Object[] newObjects);
void objectsChangedB(Object[] newObjects);
void objectsChangedC(Object[] newObjects);
void objectsDeletedA(Object[] newObjects);
void objectsDeletedB(Object[] newObjects);
void objectsDeletedC(Object[] newObjects);
}
這似乎更容易爲希望爲許多這些事件註冊的應用程序 - 它們實現多種方法在一個類中,而不是定義很多類,每個工具只有一個方法。任何缺點或其他建議?
澄清編輯:(對不起,我得到了與節日心煩意亂,不知道這應該是一個獨立的職位,但似乎是有意義的跟進這個)
我要這個代碼指定將以多種語言實現,作爲客戶端應用程序將使用的框架。對於C++來說,實現多個接口很困難。
超集抽象偵聽器可以爲每個方法提供默認的無操作實現,因此,擴展它的客戶端只需要覆蓋他們關心的那個。通過這種方法,我們以後可以決定向抽象類添加額外的方法,並且現有的客戶端可以正常工作(並且可以/如果他們選擇,可以重寫這些新方法)。一次調用只需要一次註冊,而不是許多註冊方法的替代方法(應用程序調用一個或多個註冊方法)。
有了這個說明,超集抽象類比單個抽象類更有意義嗎?
傳遞一個類型 - 但可能一次處理的對象集合是類型的組合(一些更改,一些創建) - 您是否會多次調用該方法,每個都有不同的類型,或者您需要傳遞每個對象的類型? – 2009-06-30 19:27:32
該邏輯將與調用listener.objectsCreatedA(aBounchOfObjects)相同; listener.objectsCreatedB(anotherBounchOfObjects); : listener.objectsCreated(Type.A,aBounchOfObjects); listener.objectsCreated(Type.B,anotherBounchOfObjects); – akappa 2009-06-30 19:32:13