Maneira correta de implementar o ICloneable

Qual é a maneira correta de implementarICloneable em uma hierarquia de classes? Digamos que eu tenha uma aula abstrataDrawingObject. Outra classe abstrataRectangularObject herda deDrawingObject. Existem várias classes concretas, comoShape, Text, Circle etc. que todos herdam deRectangularObject. Eu quero implementarICloneable emDrawingObject e, em seguida, carregue-o pela hierarquia, copiando as propriedades disponíveis em cada nível e chamando osClone no próximo nível.

O problema, porém, é que, como as duas primeiras classes são abstratas, não posso criar seus objetos no diretórioClone() método. Portanto, devo duplicar o procedimento de cópia da propriedade em cada classe concreta. Ou há um jeito melhor?