Implementar o padrão de projeto Façade

Olá !!!

Preciso implementar esse padrão(Façade) em um projeto e estava querendo saber
se o código que fiz abaixo se refere ao façade.

O meu chefe pediu para começar a
implementar os padrões de projeto nos próximos sistemas e agora eu tenho que aprender como implementar.

class Program{
         public static void Main(string[] args){
            facadeCliente fc = new facadeCliente();
            fc.cadastrar();

            facadeFornecedor ff = new facadeFornecedor();
            ff.cadastrar();

    }
}




    class Cliente {
        public string nome // get and set
        public Endereco endereco // get and set
        public Contato contato // get and set
        public Cliente(string _nome, Endereco _endereco, Contato _contato) {
            this.nome = _nome;
            this.endereco = _endereco;
            this.contato = _contato;
        }

    }

    class Fornecedor{
        public string nome // get and set
        public Endereco endereco // get and set
        public Contato contato // get and set
        public Fornecedor(string _nome, Endereco _endereco, Contato _contato){
            this.nome = _nome;
            this.endereco = _endereco;
            this.contato = _contato;
        }
    }


    class Endereco{
        public string endereco// get and set
        public string numero// get and set
        public Endereco(string _endereco, string _numero){
            this.endereco = _endereco;
            this.numero = _numero;
        }
    }


    class Contato{
        public string telefone // get and set
        public string email // get and set       
        public Contato(string _telefone, string _email){
            this.telefone = _telefone;
            this.email = _email;
        }
    }


    class ClienteDao {
        public void cadastrar(Cliente cliente){}
    }
    class FornecedorDao
    {
        public void cadastrar(Fornecedor fornecedor){}
    }



    class facadeCliente {
        public void cadastrar() { 
            Endereco endereco= new Endereco("Rua bbbbb","200");
            Contato contato = new Contato("1111-1111","teste@teste.com.br");
            Cliente cliente = new Cliente("Cliente1", endereco, contato);
            ClienteDao clienteDao = new ClienteDao();
            clienteDao.cadastrar(cliente);
        }

    }

    class facadeFornecedor {
        public void cadastrar()
        {
            Endereco endereco= new Endereco("Rua ccccc","300");
            Contato contato = new Contato("2222-2222","teste@teste.com.br");
            Fornecedor fornecedor = new Fornecedor("Fornecedor1", endereco, contato);
            FornecedorDao fornecedorDao = new FornecedorDao();
            fornecedorDao.cadastrar(fornecedor);

        }
    }

é mais ou menos isso ou viajei na maionese ?

Olha, melhor do que eu dar uma explicação, sugiro o livro Real World Java EE Patterns - Rethinking Best Practices.
Existe um capítulo dedicado sobre o assunto.

Abraço

Ñ faça! O padrão Service Facade só é realmente util p/ sistemas com client/servidor onde o cliente (app swing tipicamente) fica em uma máquina diferente do servidor (app EJB tipicamente). O padrão Service Facade serve p/ lidar com problemas de performance decorrentes do acesso remoto a APIs de granularidade fina.

Agora se vc está falando do Facade, o padrão de projeto do GOF ai é diferênte. Esse padrão serve p/ simplificar a interface de um sistema/API q é muito complexa ou problemática. Se vc ñ tem nenhuma API problemática com complexa demais no seu seu sistema então vc, provavelmente, ñ precisará usa-lo. Em aplicativos desktop, como parece ser o seu caso, é uma boa idéia usar um Facade p/ simpliciar os JOptionPane na forma de uma API de menssagens mais simples.

Se você tiver dois ou mais serviços que precisam ser combinados, no lugar de você criar uma dependência entre eles, crie um Service Façade, pois, além de ambos compartilharem a mesma transação aberta pelo façade, você coloca em prática o princípio da não dependência entre os serviços.

Abraço

Na prática vc dificilmente vai encontrar serviços dependentes em um caso de uso onde todos os serviços dependam da mesma transação. Além disso, vc deve usar os padrões p/ resolver problemas p/ os quais eles foram desenhados p/ resolver ao invés de aplica-los como regra em td o sistema p/ conseguir benefício nenhum. Quando vc encontrar uma situação dessas então aplique um Service Facade do contrário mantenha-se simples. Quanto mais simples for o código q vc criar mas rápido vc vai entrega-lo, menos bugs ele terá e mais fácil (barato) será a manutenção desse código. Frameworks MVCs modernos como Rails implementam arquiteturas extremamente simples sem muitas camadas como DAOs ou Facades e ganham uma popularidade absurda pela agilidade e baixo custo dos probjetos. Ñ quero dizer q em Rails esses padrões ñ se aplicam, apenas digo q vc só os aplica quando o problema requer.

O que o colega disse acima é verdade: é a lei do bom senso.

Por exemplo, desenvolvi há pouco tempo um sistema para um restaurante super famoso, neste sistema de média complexidade, tenho apenas duas classes que são Service Façade.