Autoencapsular Campo.
Você usa acesso direto a campos privados dentro de uma classe.
Crie um getter e um setter para o campo e use apenas eles para acessar o campo.
##Example
class Range {
private int low, high;
boolean includes(int arg) {
return arg >= low && arg <= high;
}
}class Range {
private int low, high;
boolean includes(int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {
return low;
}
int getHigh() {
return high;
}
}##Why Refactor
Às vezes, acessar diretamente um campo privado dentro de uma classe simplesmente não é flexível o suficiente. Você quer poder inicializar o valor de um campo na primeira vez que ele é consultado, ou realizar certas operações sobre os novos valores do campo quando são atribuídos, ou talvez fazer tudo isso de maneiras diferentes em subclasses.
##Benefits
-
O acesso indireto a campos ocorre quando um campo é manipulado por meio de métodos de acesso (getters e setters). Essa abordagem é muito mais flexível do que o acesso direto a campos.
-
Primeiro, você pode realizar operações complexas quando os dados do campo são definidos ou obtidos. A inicialização tardia (lazy initialization) e a validação dos valores do campo são facilmente implementadas dentro dos getters e setters do campo.
-
Segundo, e mais importante, você pode redefinir getters e setters em subclasses.
-
-
Você tem a opção de não implementar nenhum setter para um campo. O valor do campo será especificado apenas no construtor, tornando o campo imutável durante toda a vida do objeto.
##How to Refactor
-
Crie um getter (e, opcionalmente, um setter) para o campo. Eles devem ser
protectedoupublic. -
Encontre todas as invocações diretas do campo e substitua-as por chamadas ao getter e ao setter.