我有这样的类层次结构/继承:
public class A {
private String name;
// with getters & setters
public void doAWithName(){
...
}
}
public class B extends A {
public void doBWithName(){
// a differnt implementation to what I do in class A
}
}
public class C extends B {
public void doCWithName(){
// a differnt implementation to what I do in class A and B
}
}
因此,有一次有一个带有初始化字段“name”的A类实例。后来我希望这个A实例被包装到B或C的实例中。所以超类应该用子类包装!
如何才能使DRY最有效? 我已经考虑过使用getter / setter进行一些复制的构造函数。但在这种情况下,我必须重复自己 - 这不再尊重我最初的DRY要求了!
那么,如何通过初始化B的新字段(使用默认值)并将其余部分委托给A中的一个方法(它比B更知道应该访问A的哪个字段......)来将A转换为B. 。
以同样的方式:
如果A应该被包装到C中,那么c中的一个方法应该是init C的'new'字段,委托给B的wrap方法(因此在C中的B''新'字段),最后B委托给A,它将它的字段复制到C)的领域。
所以最后我有一个新的C实例,其中包含A的值(以及继承层次结构添加的字段的一些默认初始值)。