我需要为我的业务逻辑提供良好的建议!
我有这样的类层次结构:
Parent
- Child1 implements Parent
- Child2 implements Parent
Child1有自己的方法和字段,因为Child2有自己的方法和字段。
我可以写:
Parent p = new Child1();
( ( Child1 ) p ).getMethodInParent1
p = new Child2();
( ( Chuld2 ) p ).getMethodInParent2
但是Child1和Child2中有很多方法。我的主要目标是只使用一个Parent - p实例。我想问你在代码中到处使用动态转换是否很好?
我已阅读过访客模式。它能帮助我避免动态演员吗?
答案 0 :(得分:4)
我想问一下,在代码中使用动态转换是否很好?
不,不是。一般来说,使用演员表应该被视为例外,而不是一般规则。如果您的设计基于到处投射的需要,您应该在开始编码之前重新审视您的设计。
[访客模式]可以帮助我避免动态演员吗?
是的,它可以。但是,您需要记住,在代码中引入访问者模式会显着增加代码的复杂性,因此需要非常合理。
我会努力将Child1
和Child2
的接口统一到Parent
中,这样一个简单的多态就足够了。如果这不起作用,因为代码必须相对于多个对象表现为虚拟,我会使用访问者模式。
注意:访客模式有几个限制。其中之一是你的类层次结构应该合理地修复。如果您计划在代码中添加新的ChildXYZ
实现,则访问者模式将是一种负担,而不是一种优势,因为它会使新类更难添加。