У меня есть иерархия классов / наследование, подобное этому:
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
}
}
Таким образом, в свое время существует экземпляр класса А с инициализированным полем «имя». Позже я хочу, чтобы этот экземпляр A был заключен в экземпляр B или C. Поэтому суперклассы должны быть заключены в подкласс!
Как я могу сделать это наиболее эффективным в отношении СУХОГО?
Я думал о конструкторе, который выполняет копирование с помощью методов получения / установки. Но в этом случае я должен повторить себя - и это больше не соответствует моему первоначальному требованию СУХОЙ!
Итак, как я могу деформировать A в B, просто инициализируя новые поля B (со значениями по умолчанию) и передавая остальное методу в A (который знает больше, чем B, о каких полях A следует обращаться ...) ,
Точно так же:
Если A должен быть заключен в C, то только метод в c должен инициировать «новые» поля C, делегировать метод обертки B (который поэтому помещает «новые» поля B в C) и, наконец, B делегирует A, который копирует его поля поля С).
Итак, в конце у меня есть новый экземпляр C, в котором значения A обернуты (и некоторые значения init по умолчанию для полей, добавленных в иерархию наследования).