Как скопировать общие экземпляры суперкласса в экземпляры подкласса? - PullRequest
0 голосов
/ 05 мая 2010

У меня есть иерархия классов / наследование, подобное этому:

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 по умолчанию для полей, добавленных в иерархию наследования).

1 Ответ

2 голосов
/ 05 мая 2010

Похоже, вы просто хотите реализовать Pattern Decorator .

...