我正在努力帮助一位同事接受面向对象,我发现在某些情况下,很难找到标签(或标记)概念的可靠的现实示例) 接口(interface)。 (不包含任何方法的接口(interface);它仅用作标记或标记或标签)。虽然对于我们的讨论来说这确实不重要,但我们使用 PHP 作为讨论背后的平台(因为它是我们之间的通用语言)。我可能不是教授 OO 的最佳人选,因为我的大部分背景都是高度理论化的,而且大约 15 岁,但我就是他所拥有的。
无论如何,我发现关于标签接口(interface)的讨论很少,这让我相信它的使用甚至不足以值得讨论。我这里错了吗?
最佳答案
标签接口(interface)在 Java 中使用(Serialized 是一个明显的例子)。 C# 甚至 Java 似乎正在远离这一点,转而支持属性,它可以完成同样的事情,但还能做更多的事情。
我仍然认为它们在其他没有 .NET 和 Java 所具有的属性概念的语言中也有一席之地。
预计到达时间:
当您有一个隐含实现的接口(interface),但您不希望实现该接口(interface)的类实际上必须提供该实现时,通常会使用此方法。
一些现实世界的例子:
Serialized 是一个很好的例子 - 它意味着(某处)有一个可以序列化对象数据的实现,但是由于可以使用该实现的通用实现,因此实际上不需要让对象本身实现该功能。
另一个例子可能是网页缓存系统。假设您有一个“Page”对象和一个“RequestHandler”对象。 RequestHandler 接受页面请求,定位/创建相应的 Page 对象,调用 Page 对象上的 Render() 方法,并将结果发送到浏览器。
现在,假设您想要为呈现的页面实现缓存。但问题是有些页面是动态的,因此无法缓存。实现此目的的一种方法是让可缓存 Page 对象实现 ICacheable“标记”接口(interface)(反之亦然,您可以拥有 INotCacheable 接口(interface))。然后,RequestHandler 将检查页面是否实现了 ICacheable,如果实现了,它将在调用 Render() 后缓存结果,并在该页面的后续请求中提供这些缓存结果。
关于oop - 标签(或 "marker")接口(interface)是否已过时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/983037/