Substituir Subclasse por Campos.
Você tem subclasses que diferem apenas em seus métodos (que retornam constantes).
Substitua os métodos por campos na classe pai e exclua as subclasses.
##Example
##Why Refactor
Às vezes a refatoração é exatamente o que você precisa para evitar código de tipo (type code).
Em um caso assim, uma hierarquia de subclasses pode diferir apenas nos valores retornados por determinados métodos. Esses métodos nem sequer são resultado de algum cálculo, mas estão estritamente definidos nos próprios métodos ou nos campos por eles retornados. Para simplificar a arquitetura da classe, essa hierarquia pode ser comprimida em uma única classe que contém um ou vários campos com os valores necessários, conforme a situação.
Essas mudanças podem se tornar necessárias depois de mover uma grande quantidade de funcionalidade de uma hierarquia de classes para outro lugar. A hierarquia atual já não é tão valiosa e suas subclasses agora são apenas peso morto.
##Benefits
- Simplifica a arquitetura do sistema. Criar subclasses é exagero se tudo o que você quer é retornar valores diferentes em métodos diferentes.
##How to Refactor
-
Aplique Substituir Construtor por Método de Fábrica nas subclasses.
-
Substitua as chamadas aos construtores das subclasses por chamadas ao método de fábrica da superclasse.
-
Na superclasse, declare campos para armazenar os valores de cada um dos métodos das subclasses que retornam valores constantes.
-
Crie um construtor protegido na superclasse para inicializar os novos campos.
-
Crie ou modifique os construtores existentes das subclasses para que chamem o novo construtor da classe pai e passem a ele os valores relevantes.
-
Implemente cada método constante na classe pai para que retorne o valor do campo correspondente. Em seguida, remova o método da subclasse.
-
Se o construtor da subclasse tiver funcionalidade adicional, use Método Embutido para incorporar o construtor ao método de fábrica da superclasse.
-
Exclua a subclasse.