David,
Acredito que você ainda esteja confundindo as coisas :lol: . O Delegate vai delegar uma chamada para outra classe/método. Pode até ser 1 para 1, ou seja, o Cliente chama 1 método e o Delegate delega para apenas 1 método da outra classe, bem simples. Mas a pergunta fica: porque usar Delegate então? Usa-se ele quando a chamada para o outro método não é tão simples, onde existem fatores que irão acoplar as camadas (e isso não é bom). Um exemplo é chamada JNDI do EJB2
O Facade é para fazer uma fachada entre o cliente e vários outros objetos. O Cliente não precisa saber da existência de todos os objetos do domínio, apenas da fachada… Um exemplo que eu li a um tempo atrás e gostei muito foi do computador. Quando vamos ligar o computador, simplesmente apertamos o botão de ligar e internamente ocorre vários processos (memória, HD, monitor e etc). Portanto, o computador poderia ser uma fachada e memória, hd, monitor poderiam ser classes do dominio. Mas para ligarmos o computador, simplesmente chamamo o método computador.ligar() que irá ser responsável por chamar os outros métodos dos outros objetos. (isso é uma fachada). Nós (clientes) não temos conhecimento dos outros objetos do domínio.
Sobre como juntar esses caras em uma arquitetura é algo um pouco mais delicado. A primeira e importante dica é: só use os padrões de projetos se eles realmente se aplicam a sua necessidade. Não vá querer enfiar um monte de camadas a mais só para dizer que está bonitinho. Quanto mais simples, melhor. Portanto, se na sua arquiteura o MVC padrão (V = JSP, C = Servlet, M = modelos) satisfaz seus requisitos, ótimo, fique no mais simples.
Agora usando o seu exemplo, imagine que sua camada de negócio esteja em um módulo EJB2 e sua aplicação tem que chamar esse EJB2, o que fazer? Chamar o Delegate… porém, sua funcionalidade exige que vários objetos sejam invocados (exemplo de ligar o computador), então vamos usar o facade… No final, ficaria mais ou menos assim:
Camada de apresentação: seria a parte das jsp, xhtml…a view em si.
Camada Controladora: controller…parte de controle entre a view e o Delegate
Delegate: Faz a chamada JNDI para um Session Bean. Porém, vamos usar vários SessionBeans, então é melhor delegar para um Facade
Facade (ou Session Facade do J2EE): Irá invocar todos os outros SessionBeans e completar o request
Camada de Negocios: Seus componentes EJB.
Espero que fique mais claro. E lembre-se: simplicidade 