Depois de anos no ramo de desenvolvimento de sistemas, cheguei à conclusão que só precisamos de um único Design Pattern.
Por isso criei o pattern OnDemand. Ele está centrado em uma regra básica. Ele faz tudo o que você precisa, sob demanda.
É simples, basta ter um interface igual à abaixo:
public interface OnDemand {
public Object onDemand(Object obj);
}
Segue exemplo de implementação de qualquer coisa que você pode imaginar como este pattern:
public class CalculoAreaRetangulo implements OnDemand {
public Object onDemand(Object obj) {
double[] args = (dobule[]) obj;
double a = args[0];
double b = args[1];
return a * b;
}
}
CalculoAreaRetangulo calc = new CalculoAreaRetangulo();
double area = (Double) calc.onDemand( new double[]{ 10, 20 } );
Outro exemplo:
public class CadastroPessoaDAO implements OnDemand {
public Object onDemand(Object obj) {
Object[] args = (Object[]) obj;
String action = (String) args[1];
Pessoa p = (Pessoa) args[0];
// salva o objeto "p" com Hibernate ou faz outra coisa de acordo com o "action"
}
}
CadastroPessoaDAO dao = new CadastroPessoaDAO();
dao.onDemand( new Object[]{ pessoa, "save" } );
dao.onDemand( new Object[]{ pessoa, "delete" } );
Viu como é simples? Um único pattern atende a todos os propósitos da mesma forma.
Daí teríamos um sistema OnDemand Oriented. E cria-se um novo modelo de desenvolvimento.
Pelo que pesquisei, ele é totalmente aderente ao Extreme Go Horse.
ps: aos desavisados, obviamente isto é uma grande brincadeira.