【发布时间】:2015-05-04 08:11:39
【问题描述】:
假设我有以下类层次结构:
class abstract Parent{}
class FirstChild extends Parent {}
class SecondChild extends Parent {}
我想从每个孩子创建 DTO 对象:
class abstract ParentDTO {}
class FirstChildDTO extends ParentDTO{}
class SecondChildDTO extends ParentDTO{}
我想我需要一个类似这样的工厂方法:
ParentDTO createFrom(Parent source);
在没有instanceof 检查和 if/else 语句的情况下,在 Java 中是否有任何不错的方法?
编辑: 这个工厂方法不起作用:
public ParentDTO create(Parent source)
{
return _create(source);
}
private FirstChildDTO _create(FirstChild source)
{
return new FirstDTO();
}
private SecondChildDTO _create(SecondChild source)
{
return new SecondDTO();
}
private ParentDTO _create(Parent source)
{
return new ParentDTO();
}
它只生成ParentDTOs,原因如下:
Parent p = new FirstChild();
System.out.println(factory.create(p)); //ParentDTO
FirstChild f = new FirstChild();
System.out.println(factory.create(f)); //FirstChildDTO
【问题讨论】:
-
在 Java 中,favor composition over inheritance 用于值对象。它会产生您不想要/不需要的问题和麻烦。
-
@OlivierGrégoire 谢谢,我记住了。
标签: java oop design-patterns factory factory-pattern