Na orientação a objetos existem os design patterns que são padrões projeto de código pautados em boas práticas. Dentre eles, está um chamado Singleton.
O objetivo deste exercício não é ainda se aprofundar os padrões de projeto, mas usar esse padrão (Singleton) como tema de estudo.
O Singleton é usado quando você deseja garantir que apenas uma instância (objeto) será criada de uma dada classe. Desse modo, é necessário se criar um mecanismo eficienciente no qual só seja possível se criar esse objeto único.
Registro SingletonRetomando a classe Registro a seguir, que foi usada como exemplo para criar um contador compartilhado entre diversos objetos. O desafio é manter o atributo contadore o método proximoContador() como não estáticos, mas adaptar a classe de modo que seja possível se criar apenas uma instância de Registro. Com isso, obteremos o mesmo efeito de contador compartilhado, mas usando objetos. Isso será importante no futuro.
Você precisará usar métodos e atributos estáticos bem como precisará configurar o encapsulamento. Mas não deve transformar o atributo contador nem o método proximoContador em estáticos.
In [1]:
public class Registro {
int contador = 0;
int proximoContador() {
contador++;
return contador;
}
}
Out[1]:
In [3]:
public class Registro {
/* instancia */
private int contador;
private Registro() {
contador = 0;
}
public int proximoContador() {
contador++;
return contador;
}
/* estatica */
private static Registro reg = null;
public static Registro instanciaRegistro() {
if (reg == null)
reg = new Registro();
return reg;
}
}
Out[3]:
In [4]:
Registro r1 = Registro.instanciaRegistro(),
r2 = Registro.instanciaRegistro(),
r3 = Registro.instanciaRegistro();
System.out.println("r2: " + r2.proximoContador());
System.out.println("r1: " + r1.proximoContador());
System.out.println("r3: " + r3.proximoContador());
Out[4]: