7.2 什么时候可以进行接口复制?
拥有相同签名的方法并不总是坏事。重要的是,每个新方法都应该贡献重要的功能。传递式方法是不好的,因为它们没有贡献新的功能。
一个方法调用另一个具有相同签名的方法很有用的一个例子是调度器(dispatcher)。调度器是一个方法,它使用其参数来选择要调用的其他几种方法之一;然后它将大部分或全部参数传递给被选择的方法。调度器的签名通常与它所调用的方法的签名相同。即便如此,调度器还是提供了有用的功能:它选择其他几个方法中的哪一个来执行每个任务。
例如,当Web服务器收到来自Web浏览器的HTTP请求时,它会调用一个调度器,检查传入请求中的URL并选择一个特定的方法来处理该请求。一些URL可能通过返回磁盘上的文件内容来处理;其他URL可能通过调用PHP或JavaScript等语言中的程序来处理。调度过程可能非常复杂,通常由一组与传入 URL 匹配的规则驱动。
多个方法具有相同的签名是可以的,只要它们中的每一个都提供有用且不同的功能。由调度器调用的方法就具有这种属性。另一个例子是具有多种实现的接口,例如操作系统中的磁盘驱动程序。每个驱动程序都为不同种类的磁盘提供支持,但它们都有相同的接口。当几个方法提供同一个接口的不同实现时,就会减少认知负荷。一旦你使用了其中一个方法,就可以更轻松地使用其他方法,因为你不需要学习新的接口。像这样的方法通常在同一层,它们不会互相调用。
Last updated