O legal de programar é que existem infinitas maneiras de fazer errado mas poucas de fazer certo.
Bom, deixa eu abrir 1 parentese aqui. Se você está fazendo isso no teu tempo pessoal para coisas que são um hobby, eu estou errado e te devo desculpas Sergio.
Mas se você está fazendo isso profissionalmente, eu devo dizer que é uma atitude condenavel usar frameworks caseiros para problemas já resolvidos.
Falo por interesse proprio, frameworks caseiros fazem eu ganhar menos e diminuem as chances de conseguir um emprego melhor! Como assim?
Soluções caseiras são receitas certeiras para custos de manutenção astronômicos, altas taxas de defeito, clientes insatisfeitos, projetos fracassados, dinheiro indo ralo abaixo, demissões, menos empregos, maior oferta de mão de obra e, ufa, menores salarios sendo pagos.
O Brasil é um dos paises que menos tira proveito de TI no mundo e pelos exatos motivos citados acima.
Mas voltando ao assunto.
O concelho, não é um padrão per se, de usar composição no lugar de herança vem do fato que a segunda gera um acoplamento desnecessario.
Via de regra, herança sem comportamento polimórfico é sinal de coisa errada, assim como sobrescrever todos métodos (salvos casos como proxy ou decorator).
Eu falei em usar um FrontController, Phillip, por que ele ajuda a separar comportamento relativo a como servir uma requisição (encoding, locale, etc) do negocio envolvido no processamento dela. Esse desacoplamento não é sempre necessario. O ruim é criar uma classe base com 1 tonelada de métodos ‘helpers’ que não são sobrescritos.
Herança deve ser evitada quando temos o caso de um objeto querer usar outro, e por conveniencia apenas herdamos.
Composição e herança apenas são diferentes quando existe polimorfismo na segunda. Caso contrario é apenas uma variação sintática.
Se bem que eu adoraria um contra-exemplo, no qual é feita herança sem mudança de comportamento e possui uma boa justificativa.
Phillip, se você quer alguma coisa facil para fazer alguma algo quick’n dirty, use JSF, JSP&scripts, asp.net ou mesmo perl. Ferramentas muito mais apropriadas que servlets.