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