首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >智能儿童设计模式解决了什么痛点?

智能儿童设计模式解决了什么痛点?
EN

Stack Overflow用户
提问于 2015-11-17 14:58:39
回答 1查看 51关注 0票数 1

在缺少此模式的情况下,派生类中需要downcasting。我的问题是,这个模式只解决了downcasting的问题吗?与智能儿童设计模式提供的替代方案相比,为什么downcasting不好?

EN

回答 1

Stack Overflow用户

发布于 2015-11-17 19:00:17

我的问题是,这个模式只解决了向下转换的问题吗?

是。这在动态类型的语言中是不存在问题的。它专门针对静态类型语言中出现的问题,这些语言具有想要在双重层次结构之间形成的关系,并且特别是为了避免向下转换的需要。

和为什么向下转换与智能儿童设计模式提供的替代方案相比是不好的?

有很多理由可以解释为什么向下转换是不受欢迎的。首先,它有点像x射线类型系统(就像任何形式的显式类型转换的一般情况一样)。提供一个虚方法来代替它看起来像是一个漏洞,但它确实建立了一个正式的接口,与显式的、低级的重新解释位和字节的强制转换相比,这个接口更不容易被误用。在极少数情况下,向下转换可能是适合这项工作的工具,但它是一个笨重的工具,当有更安全的替代方案时,它通常会更好。

使用dynamic_casts,您可以获得一些安全性,但需要RTTI (在一些紧凑的上下文中,这有时并不总是可用的奢侈品)。而且它仍然不能使用类型可用的受约束的公共接口,而是“绕过”它(例如:没有强大的编译时强制执行哪些类型可以作为合法的目标类型来强制转换源类型)。它为引用抛出异常,并为指针返回null,这可能是一种不可靠的行为。

有了虚拟方法,您就可以使用这种静态类型的语言和编译器,并让它为您工作,从而在过程中发现更多的人为错误。您还可以向虚拟方法添加插装和任何您喜欢的东西,而您对强制转换有点无能为力。

在大多数情况下,使其成为接口的显式部分更安全,并且更清楚地说明数据类型(或者更确切地说,接口)提供了哪些合法行为。这其中有一些是“美观的”,但也有一些明确的好处,以避免悲观。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33750917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档