L'esempio specifico che ho in mente è javax.servlet.ServletResponseWrapper :
public class ServletResponseWrapper implements ServletResponse {
private ServletResponse response;
/**
* The default behavior of this method is to call setCharacterEncoding(String charset)
* on the wrapped response object.
*
* @since 2.4
*/
public void setCharacterEncoding(String charset) {
this.response.setCharacterEncoding(charset);
}
/**
* The default behavior of this method is to return getCharacterEncoding()
* on the wrapped response object.
*/
public String getCharacterEncoding() {
return this.response.getCharacterEncoding();
}
/**
* The default behavior of this method is to return getOutputStream()
* on the wrapped response object.
*/
public ServletOutputStream getOutputStream() throws IOException {
return this.response.getOutputStream();
}
/** and so on **/
}
ServletResponseWrapper
fa niente . Passa solo l'esecuzione all'oggetto nidificato. Quindi ServletResponseWrapper
non può funzionare a meno che non ci sia un'altra classe (diciamo ServletResponseConcrete
) che implementa anche ServletResponse
e fa il vero lavoro.
In che contesto potresti utilizzare ServletResponseWrapper
che non puoi semplicemente utilizzare ServletResponseConcrete
direttamente? Questo non ha assolutamente senso per me. Non vedo come sia utile anche per la sottoclasse. Se sottoclassi ServletResponseWrapper, allora ho per implementare comunque ogni funzione, quindi perché non creare una classe che implementa ServletResponse
direttamente?