【发布时间】:2017-11-09 17:47:19
【问题描述】:
我正在学习 java 设计模式,我想知道是否可以应用一些解决以下问题。我有 Solider 类和一些子类,例如:General 和 Sergeant。我正在创建 Solider 对象,在运行时我想将此对象更改为 General 或 Sergeant 对象,或者使用之前创建的 Solider 对象创建新的 Sergeant 或 General 对象:
Solider s = new Solider(...);
.....
if (generalCondition) {
General g = createGeneralFromSolider(s);
//or better:
//General g = promoteSoliderToGeneral(s);
} else if (sergeantCondition) {
Sergeant sr = createSergeantFromSolider(s);
//or better:
//Sergeant sr = promoteSoliderToSergeant(s);
}
首先我决定在 General/Sergeant Class 中创建额外的构造函数:
Class General extends Solider {
General(Solider s, Map<String, String> generalSpecificParams) {
//first we are going to copy all solider params to general params (bad idea if we have a lot of params)
this.setParamX(s.getParamX());
....
//then we can assign the rest of general-specific params
this.setGeneralSpecificParams(generalSpecificParams);
}
}
并在方法 createGeneralFromSolider 中使用它,但我不确定它是否是优雅的方式。主要缺点是我创建了新对象,所以在调用 createGeneralFromSolider 后我在内存中有 2 个对象。我宁愿在内存中有一个对象:从 Solider 提升的 General/Sergeant(对象 General/Sergeant,之前是 Solider 对象)。我想知道我是否可以使用一些设计模式来解决它。我记得在 C++ 中有类似复制构造函数的东西,它通过一个接一个地分配所有参数来将所有参数从一个对象复制到另一个对象。在 Java 中我没有听说过类似的东西。
【问题讨论】:
-
你确定要在这里使用继承吗?
标签: java design-patterns