我熟悉标准听众,尤其是。在爪哇。例如,如果您有一个对象集合,它可能支持一组不同事物的侦听器: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++,实现多个接口很困难。
超集抽象侦听器可以为每个方法提供默认的无操作实现,因此扩展它的客户端只需覆盖他们关心的那些。使用这种方法,我们稍后可以决定向抽象类添加额外的方法,并且现有的客户端就可以了(并且可以在他们选择时覆盖这些新方法)。一次调用只需要一次注册,而不是许多注册方法的替代方案(应用程序调用一个或多个)。
有了这个澄清,超集抽象类是否比单个抽象类更有意义?