oop - 标签(或 "marker")接口(interface)是否已过时?

标签 oop theory

我正在努力帮助一位同事接受面向对象,我发现在某些情况下,很难找到标签(或标记)概念的可靠的现实示例) 接口(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/

相关文章:

c++ - 图可排序性 C++

c++ - 在 C++ 中从字符串生成唯一无符号整数的最佳方法是什么?

programming-languages - 同形性究竟是什么意思?

oop - 一个实用的面向对象设计问题

c++ - 函数不参与继承中的重载决策

php - php 类的性能惩罚

java - 如何防止接口(interface)被扩展

c# - 将带有对象的集合发送到另一个列表

data-structures - 通用哈希的基础知识,如何确保可访问性

algorithm - 为什么图灵机的数量是有限的?