模式“访客”还是动态演员?

时间:2014-01-20 12:52:33

标签: java design-patterns

我需要为我的业务逻辑提供良好的建议!

我有这样的类层次结构:

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实例。我想问你在代码中到处使用动态转换是否很好?

我已阅读过访客模式。它能帮助我避免动态演员吗?

1 个答案:

答案 0 :(得分:4)

  

我想问一下,在代码中使用动态转换是否很好?

不,不是。一般来说,使用演员表应该被视为例外,而不是一般规则。如果您的设计基于到处投射的需要,您应该在开始编码之前重新审视您的设计。

  

[访客模式]可以帮助我避免动态演员吗?

是的,它可以。但是,您需要记住,在代码中引入访问者模式会显着增加代码的复杂性,因此需要非常合理。

我会努力将Child1Child2的接口统一到Parent中,这样一个简单的多态就足够了。如果这不起作用,因为代码必须相对于多个对象表现为虚拟,我会使用访问者模式。

注意:访客模式有几个限制。其中之一是你的类层次结构应该合理地修复。如果您计划在代码中添加新的ChildXYZ实现,则访问者模式将是一种负担,而不是一种优势,因为它会使新类更难添加。