|
O programador deve ficar atento às oportunidades de não instanciar objetos explicitamente e mais do que isso: usar no lugar de construtores públicos métodos controladores de instâncias ou constantes. |
|
public static Tipo m(t b){ return new
Tipo(b); } public static Tipo m(t b){ … return Tipo.CONSTANTE1; } |
|
Se for usado método ou constante podemos usar nome específico (ao invés de ficar preso ao nome da classe no caso de construtor. Não há obrigação de que seja criado um novo objeto (podem ser usados objetos previamente criados: “flyweight”). O trecho abaixo é um “fair use”do livro “Effective Java” (p. 14). |
|
// Builder Pattern public class NutritionFacts{ private
final int servingSize; private
final int servings; private
final int calories; private
final int fat; private
final int sodium; private
final int carbohydrate; public
static class Builder { //Required
parameters private
final int servingSize; private
final int servings; //Optional
parameters-initialized to default values private
int calories = 0; private
int fat = 0; private
int carbohydrate = 0; private
int sodium = 0; public
Builder(int servingSize, int servings){
this.servingSize = servingSize; this.servings
= servings; } public
Builder calories(int val)
{calories = val; return this;} public
Builder fat(int val) { fat =
val; return this; } public
Builder carbohydrate(int val) {
carbohydrate = val; return this; } public
Builder sodium(int val) { sodium
= val; return this; } public
NutritionFacts build(){ return
new NutritionFacts(this); } } private
NutritionFacts(Builder builder){
servingSize = builder.servingSize; servings =
builder.servings; calories =
builder.calories; fat =
builder.fat; sodium =
builder.sodium;
carbohydrate = builder.carbohydrate; } } |
|
|