我正在努力帮助同事与OO达成协议,我发现在某些情况下,很难找到标签(或标记)界面概念的可靠实际示例.(不包含任何方法的接口;仅用作标记或标记或标记).虽然我们讨论的内容确实无关紧要,但我们使用PHP作为讨论背后的平台(因为它是我们之间的共同语言).我可能不是教OO的最佳人选,因为我的大部分背景都是高度理论化的,大约15岁,但我就是他所拥有的.
在任何情况下,我发现关于标签接口的讨论缺乏让我相信它甚至没有被充分利用以保证讨论.我错了吗?
Eri*_*lje 10
标记接口在Java中使用(Serializable是明显的例子).C#甚至Java似乎都在偏离这一点,虽然支持属性,这可以完成同样的事情,但也可以做更多.
我仍然认为在其他语言中有一个地方没有.NET和Java所具有的属性概念.
ETA:
当您拥有一个暗示实现的接口时,通常会使用此方法,但您不希望实现该接口的类实际上必须提供该实现.
一些现实世界的例子:
Serializable是一个很好的例子 - 它意味着有一个可以序列化对象数据的实现(某处),但由于它的通用实现可用,因此不需要实际让对象实现该功能本身.
另一个例子可能是网页缓存系统.假设您有一个"Page"对象和一个"RequestHandler"对象.RequestHandler接受页面请求,定位/创建相应的Page对象,在Page对象上调用Render()方法,并将结果发送到浏览器.
现在,假设您想要为渲染页面实现缓存.但问题是有些页面是动态的,因此无法缓存.实现这一点的一种方法是让可缓存的Page对象实现一个ICacheable"tag"接口(反之亦然,你可以有一个INotCacheable接口).然后,RequestHandler将检查Page是否实现了ICacheable,如果是,则会在调用Render()之后缓存结果,并在该页面的后续请求中提供这些缓存结果.
在.Net Tag接口可以很好地与反射和扩展方法一起使用.标记接口通常是没有任何方法的接口.它们允许您查看某个对象是否属于某种类型而没有反射您的对象的笔杆.
.Net Framework INamingContainer中的示例是ASP.Net的一部分
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |