Um simples exemplo prático do uso de reflection para comunicação com backends distintos, definidos em tempo de execução.
- Definindo uma interface comum, a ser seguida por todos os possíveis adaptadores a serem utilizados:
public interface Logger {
void log();
}
- Implementando a interface de logging de dois modos distintos:
public class DBLogger implements Logger {
public void log() {
// TODO Auto-generated method stub
System.out.println("Logging on the Database");
}
}
e, em seguida:
public class TextLogger implements Logger {
public void log() {
// TODO Auto-generated method stub
System.out.println("Logging on a text file");
}
}
- Executando a aplicação, definindo o mecanismo de logging a ser utilizado em tempo de execução:
public class Test {
public static void main(String [] args) {
Logger myLogger = null;
try {
Class myClass = Class.forName("DBLogger");
myLogger = (Logger) myClass.newInstance();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
myLogger.log();
}
}
Obviamente o nome da classe a ser utilizada não será definida de modo estático, como apresentado acima, para fins de ilustração. Desse modo conseguimos utilizar o mecanismo desejado, podendo criar novas classes implementadoras sem a necessidade de alterar a classe principal (ou chamadora).
segunda-feira, 23 de novembro de 2009
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário