[quote=sergiotaborda][quote=ECO2004]Eu quero fornecer vários façades…cada um representando uma camada. O primeiro fornece um conjuntos de comandos básico ao cliente. Se o cliente desejar mais comandos, ele pode utilizar outra fachada, e assim por diante.
Se eu fornecer apenas façades, sem conexão entre elas, não estará configurado um sistema em camadas.[/quote]
Vc está misturando as bolas e estás misturando feio…
Fornecer mais comandos usando outra interface não é outra camada. Não tem nada que ver com camadas.
Vc já definiu sua camada de serviços que são a tv, som, dvd , etc… pronto. Não ha mais camadas no seu sistema de 5 classes. Vc quer mais camadas ? então crie mais camadas abaixo dos serviços ou acima do façade. Criar outro façade não é criar outra camada.
Agora, não ha razão para que o mesmo façade não possa fazer os comandos avançados. Aliás até deve, pela simples razão que é mais DRY. Porque vou ter outra classe conversando com os mesmos serviços se posso usar a mesma ?
Além disso faz sentido para o cliente só usar uma interface para controlar tudo. Esse foi o propósito de criar o façade para começo de conversa.
public class Facade {
private Televisao televisao;
private DVD dvd;
private Som som;
//não ha acesso publico aos atributos acima
public void ligar(){
televisão.ligar();
dvd.ligar();
som.ligar();
}
public void definirVolume(int volume){
televisão.definirVolume(volume);
dvd.definirVolume(volume);
som.definirVolume(volume);
}
}
public class Exemplo {
void go() {
Facade facade = new Facade();
facade..volume(20);
facade.ligar();
}
}
O façade existe para criar uma coerência para que usa. O cliente poderia usar os serviços em separado, mas assim é mais simples. A superficie da sua camada é menor ( a superficie é o numero de métodos publicados) o que facilita a manutenção futura.
Em resumo. O que você quer, não faz sentido. Ou pelo menos não com os nomes que vc está usando. Vc quer fazer outra interface e outra classe, ok, faça. Mas não diga que isso é uma camada.
Mas se vc entendeu bem o padrão Façade , vc não iria fazer outra interface e classe.[/quote]
Obrigado. Eu estava confundindo então o que eram as camadas no padrão.