Em vez de construir uma fachada , não faria sentido fazer algo mais assim?
public interface SuccessListener<T> {
default void onSuccess(T data) {
// Completely ignore it.
}
}
public interface AuthFailureListener {
default void onAuthFailure() {
// Completely ignore it.
}
}
public interface ErrorListener {
default void onError() {
// Completely ignore it.
}
}
// Retain the old API
public interface GetCallback<T> extends SuccessListener<T>, AuthFailureListener, ErrorListener {
// Now empty - we are a conglmerate.
}
public static <T> void issueRequest(String url, SuccessListener<T> successListener, AuthFailureListener failureListener, ErrorListener errorListener) {
// Implementation ...
}
public static <T> void issueRequest(String url, GetCallback<T> callback) {
// Ensures backwards compatability.
issueRequest(url, callback, callback, callback);
}
public void getData() {
issueRequest("http://programmers.stackexchange.com", new GetCallback<String>() {
@Override
public void onSuccess(String data) {
}
@Override
public void onAuthFailure() {
}
//@Override
//public void onError() {
// Can now leave out the ones you don't want.
//}
});
}
Ele ainda é compatível com sua API anterior e, internamente, quem se importa com o fato de o mesmo objeto ser um ouvinte para todos os três eventos. Também abre as possibilidades de adicionar implementações padrão e permitir a chance de emitir uma solicitação com apenas SuccessListener
.
Observação: alterei o código para usar default
para ter ainda mais gentileza.