Mar*_*itt 3 java polymorphism design-patterns
给定以下类和服务层签名:
public class PersonActionRequest {
PersonVO person
// ... other fields
}
public class MyServiceLayerClass {
public void requestAction(PersonActionRequest request)
{
PersonVO abstractPerson = request.getPerson();
// call appropriate executeAction method based on subclass of PersonVO
}
private void executeAction(PersonVO person) {}
private void executeAction(EmployeeVO employee) {}
private void executeAction(ManagerVO manager) {}
private void executeAction(UnicornWranglerVO unicornWrangler) {}
}
Run Code Online (Sandbox Code Playgroud)
正如这里所讨论的,java 将在编译时根据类型信息选择最佳方法。(即,它将始终选择executeAction(PersonVO person))。
选择正确方法的最合适方法是什么?
互联网告诉我,使用instanceof会让我打耳光。但是,我没有看到在不显式转换abstractPerson为其他具体类型之一的情况下选择方法的适当方法。
编辑: 澄清 - 传入的 VO 是一个简单的 ValueObject,为 Web 客户端公开以实例化和传入。按照惯例,它上面没有方法,它只是一个带有字段的数据结构。
因此,呼叫personVO.executeAction()不是一种选择。
谢谢
马蒂
如果executeAction是在一个基类或接口的方法,这是常见的PersonVO,EmployeeVO,ManagerVO和UnicornWranglerVO,你可以只调用abstractPerson.executeAction(),而不必多次覆盖的方法。