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

nig*_*ale 1 java design-patterns

我需要关于我的业务逻辑的好的建议!

我有这样的类层次结构:

Parent
- Child1 implements Parent
- Child2 implements Parent
Run Code Online (Sandbox Code Playgroud)

Child1具有自己的方法和字段,Child2具有其自己的方法和字段。

我可以写:

Parent p = new Child1();
( ( Child1 ) p ).getMethodInParent1

p = new Child2();
( ( Chuld2 ) p ).getMethodInParent2
Run Code Online (Sandbox Code Playgroud)

但是Child1和Child2中有很多方法。我的主要目标是仅使用Parent的一个实例-p。我想问你在代码中到处使用动态转换是否是一个好方法?

我已经阅读了有关访问者模式的信息。它可以帮助我避免动态转换吗?

das*_*ght 5

我想问一下在代码中到处都使用动态转换的好方法吗?

不它不是。一般而言,使用强制转换应视为例外,而不是常规。如果您的设计基于在各处进行转换的需求,则应在开始编写代码之前重新访问设计。

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

是的,它可以。但是,您需要记住,在代码中引入访问者模式会极大地增加代码的复杂性,因此需要充分说明这一点。

我会统一的界面努力Child1Child2Parent,使一个简单的多态就足够了。如果由于代码必须针对多个对象执行虚拟操作而无法解决问题,那么我将使用visitor模式。

注意:访客模式有几个限制。其中之一是您的类层次结构应合理固定。如果您打算ChildXYZ在代码中添加新的实现,则访问者模式将是一种责任,而不是优势,因为它将使添加新类更加困难。