Nel libro Efficace Java dà la migliore implementazione del pattern Singleton nel suo, che è implementato da un Enum . Ho dei dubbi su come implementare questo modello con un'API di terze parti.
Sto usando un'API di terze parti che fornisce un'interfaccia IRCApi che ha molti metodi come:
public interface IRCApi{
void connect();
void disconnect();
void disconnect(String aQuitMessage);
void joinChannel(String aChannelName);
//...
}
La mia domanda: il frammento di codice è sotto un'implementazione valida di quel modello di design con tutti i vantaggi citati da Joshua Bloch (supporto multi-thread, possibilità di cambiare, ecc.):
public enum IRCApiSingleton {
INSTANCE;
private final IRCApi ircApi = new IRCApiImpl(false);
public final IRCApi get() {
return ircApi;
}
}
utilizzando in questo modo: IRCApiSingleton.get () connect ();.
O devo rendere il mio enum implementare IRCApi e incapsulare tutti i metodi di un'implementazione IRCApi (ci sono circa 40 metodi), come:
public enum IRCApiSingleton implements IRCApi {
INSTANCE {
private IRCApi impl = new IRCApiImpl(true);
@Override
public void connect() {
impl.connect();
}
@Override
public void disconnect() {
impl.disconnect();
}
//...
};
}
e usa direttamente l'ISTANZA?