标签(或“标记”)接口是否已过时?

2023-12-29

我正在尝试帮助一位同事接受 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(使用前将#替换为@)

标签(或“标记”)接口是否已过时? 的相关文章

  • PHP - 多个不同的数据库依赖注入类

    我花了过去几个小时试图找到 最佳 最合乎逻辑的方法的答案 以编写一个 php 数据库类以同时连接到一个 postgresql 数据库和一个 mysql 数据库 另外 我想采用依赖注入设计 但对整个概念还是陌生的 到目前为止我已经想出了 cl
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • UserDict 类的优点?

    使用有什么好处UserDict class 我的意思是 我真正得到的不是 class MyClass object def init self self a 0 self b 0 m MyClass m a 5 m b 7 我将写下以下内容
  • Python Tkinter OOP 布局配置

    我正在尝试使用 tkinter 构建一个应用程序 该布局在没有 OO 原则的情况下工作 但我很难理解应该如何将其转移到 OO The layout is as shown in the pic below 1280x720px 我有以下内容
  • PHP 特性 - 定义通用常量

    定义可由命名空间内的多个类使用的常量的最佳方法是什么 我试图避免过多的继承 因此扩展基类不是理想的解决方案 并且我正在努力寻找使用特征的良好解决方案 这在 PHP 5 4 中是否可行 或者应该采取不同的方法 我有以下情况 trait Bas
  • PHP 中可以动态添加数据成员吗?

    我想知道是否可以在 PHP 运行时添加新的类数据成员 Yes prop newname obj gt prop 42 会做同样的事情 obj gt newname 42 如果 obj 尚不存在 则任一者都会将 newname 添加为属性
  • 参考接口创建对象

    引用变量可以声明为类类型或接口类型 如果变量声明为接口类型 则它可以引用实现该接口的任何类的任何对象 根据上面的说法我做了一个理解上的代码 正如上面所说声明为接口类型 它可以引用实现该接口的任何类的任何对象 但在我的代码中显示display
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 一个类应该验证自身还是创建另一个类来验证它?

    假设我有一堂课 class NavigationData float roll float pitch double latitude double longitude 如果我想创建一个方法 const bool validate cons
  • 从父类调用重写的虚拟方法

    假设您正在编写原始 C Object类并且您想要以下功能 object1 object2将比较引用 除非该运算符被覆盖 object1 object2将始终返回对象实际值的倒数object1 object2 所以 举例来说 如果我有一个Bu
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • 面向对象的铸造错误[重复]

    这个问题在这里已经有答案了 将派生类强制转换为基类 我有一个通用的基本抽象类 继承自 IComparable 其定义如下 public abstract class BaseClass
  • “对象之间通过传递消息进行通信”到底是如何实现的?

    在几本有关面向对象编程的介绍性文本中 我遇到过上述陈述 来自维基百科 在 OOP 中 每个对象都能够接收消息 处理数据 以及发送消息与其他对象相关 并且可以被视为具有独特角色或责任的独立 机器 该语句在代码中到底意味着什么 class A
  • 为什么不允许 System.out.println(super) ?

    Why is System out println super 不允许 System out println this 这没问题并且this toString 自动调用并打印 当然 用实例变量代替也可以this 然而 this and su
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化

随机推荐

  • webpack模块解析失败意外字符'@'

    我正在使用 vue cli 在 main js 中导入 css 文件后 import Vue from vue import App from App vue import element ui lib theme default inde
  • iOS 推送通知类型选项?警报与横幅?

    我读过这里的帖子 建议让推送通知显示为警报而不是横幅的唯一方法是单个最终用户更改Alert Style in the Notifications应用程序的部分Settings 让我困惑的是 有些应用程序默认为Alerts风格 而不必这样做
  • 正则表达式的意外匹配

    我期望正则表达式模式ab 2 c仅匹配a后跟 0 1 或 2bs 随后是c 许多语言都以这种方式工作 例如 Python 然而 在 R 中 grepl ab 2 c c ac abc abbc abbbc abbbbc 1 TRUE TRU
  • 使用数据注释将字段标记为“只读”

    我正在努力使ID字段只读 它是数据库中的一个身份字段 因此用户不会设置它 不过 他们还是愿意看到 当分配给一个时 我缺少什么如下DataForm仍然允许编辑该值 public class StatusChoice BindableBase
  • 使用 Selenium 保存整页内容

    我想知道保存 Selenium 访问站点时检索到的所有文件的最佳方法是什么 换句话说 当 Selenium 访问时http www google com http www google com我想保存 HTML JavaScript 包括
  • 如何在windows中通过命令提示符方式设置文件权限?

    如何通过命令提示符方式在windows中设置相同的文件权限 gt attrib Displays or changes file attributes ATTRIB R R A A S S H H drive path filename S
  • 处理器架构不匹配构建错误

    在尝试运行测试应用程序时 我收到以下错误两次 正在构建的项目 MSIL 的处理器架构与参考 C Windows Microsoft NET Framework v4 0 30319 mscorlib dll x86 的处理器架构之间存在不匹
  • 如何在 google-app-engine 中使用内置的 django templatetags

    我正在尝试在内置模板标签中使用 Django 例如标记和 在我的谷歌应用程序中人性化 但它不起作用 我在 INSTALLED APPS 中添加了标记和人性化 还是行不通 如何使用它 这是人性化的方法 其他应该类似 在调用模板的控制器末尾有一
  • 从 iOS 设备上传图像到服务器

    我正在尝试在远程服务器上上传图像 如果我从谷歌下载手机上的图像并上传它们 例如http www mangauk com gallery albums album 11 lg scooby jpeg http www mangauk com
  • 在 PHP 中实现 secp256k1 (ECDSA)(针对比特币)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于热心的反对者和 或结束者 如果您认为这对 SO 来说是题外话 请向我指出其他 StackExchange 网站 在该网站上这个问题会更
  • 为什么矩阵和 data.frame 之间的“越界”索引不同?

    我确信这是基本的 但我只是想really在这里了解R数据结构的逻辑 如果我按超出范围的索引对矩阵进行子集化 则会得到该错误 m lt matrix data c foo bar nrow 1 m 2 Error in m 2 subscri
  • 使用 php 清除 CMD-shell

    我有这个简单的 php 脚本 它每秒输出一个字符串
  • 如何删除包过滤器?

    如何禁用包过滤器 我不断收到此消息 Ignoring unknown package filter build tools 23 0 0 rc2 Warning The package filter removed all packages
  • 如何在 C# 中更改 XML 文件的属性值?

    我有一个 XML 文件 web config 我需要编辑每个标签的 value 属性 具体取决于键名称 这是 XML 文件的示例
  • 使用 xPath 循环遍历项目

    我正在尝试循环遍历 xml 文档 但我仍然在第二次迭代中获取第一个元素 不确定我缺少什么 有人可以帮忙吗 Xpath 非常新 string file HttpContext Current Server MapPath XML Locati
  • 是否需要break语句或者return语句就足够了?

    在我的 Python 3 5 脚本中 我有一个简单的for循环 看起来像这样 request simple string ignore Tuple that contains regex s to ignore for i regex in
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • 在 Shiny 中按日期过滤

    作为一个可怜的闪亮家伙 无法解决简单的任务 我在数据框中有一行带有日期的行 crime date lt strptime incidents REPORT DAT format Y m d 我的日期输出如下所示 1 2017 04 07 E
  • 在 Flask 中渲染 Jupyter Notebook Iframe

    我正在使用 Flask 为单个用户托管 UI 我一直在尝试做的事情是设置一种方法 让用户单击一个按钮 使用标记语言在文档中预先指定的位置插入一些文本和图像 我最初使用 Jinja2 来实现此目的 但问题是用户需要能够在插入数据后修改文档 以
  • 标签(或“标记”)接口是否已过时?

    我正在尝试帮助一位同事接受 OO 并且我发现在某些情况下 很难找到标签概念的可靠的现实示例 或marker 界面 不包含任何方法的接口 它仅用作标记或标记或标签 虽然对于我们的讨论来说这确实不重要 但我们使用 PHP 作为讨论背后的平台 因