SóProvas


ID
784714
Banca
ESAF
Órgão
CGU
Ano
2012
Provas
Disciplina
Arquitetura de Software
Assuntos

O padrão de projeto Factory provê uma classe de decisão que retorna

Alternativas
Comentários
  •  Factory Method: Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. Através de alguma condição, será decidida qual classe realmente será instanciada.
  • Eu não concordo que deve ter um parâmetro recebido. Pelo que eu entendi, o Factory Method é um método que retorna uma implementação de uma interface específica por exemplo Fruta. Podemos ter por exemplo uma super classe qualquer, com um método abstrato que retorna Fruta. Em cada uma das subclasses, este método irá retornar uma fruta diferente. 

    Fontes:
    http://en.wikipedia.org/wiki/Factory_method_pattern
    http://stackoverflow.com/questions/1001767/what-is-the-basic-difference-between-factory-and-abstract-factory-patterns
    http://stackoverflow.com/questions/5739611/differences-between-abstract-factory-pattern-and-factory-method
  • Guilherme,
    Concordo com você. Cada uma das subclasses vai retornar um tipo de objeto (fruta). Porém, como você vai informar qual subclasse irá retornar? Com a utilização de um parâmetro recebido.
  • Rosa, 
     
    Estudei mais sobre o assunto aqui, entendi melhor e tentarei explicar melhor.
     
    Fato é que Factory Method se refere a um método que funciona como uma fábrica de objeto. Pode criar vários objetos que são subclasse ou implementação de Fruta por exemplo. Pode criar Banana, Abaxi, etc. 
     
    A passagem de parâmetros para este método é irrelevante. Quem decide qual implementação de Fruta criar não é quaisquer parâmetros que sejam passados, e vou explicar abaixo o porquê. O único padrão criacional que exige parâmetros para criar objeto é o Builder, mas mesmo assim nem é para definir o tipo do objeto a ser criado e sim para definir suas características.
     
    Vamos agora à descrição geral para Factory Method descrita no livro dos GoF:
    "Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses."
     
    O exemplo é ruim, mas com a Fruta, nós teremos mais uma interface a Prateleira. Frutas ficam em prateleiras, mas cada prateleira armazena tipos de frutas diferentes. Temos então:
     
    public interface Prateleira(){
           public void criarFrutaNovaParaPorNaPrateleira();
           public Fruta getFruta();
    }
     
    public interface Fruta(){...}
     
     
    A fábrica então é o método criarFrutaNovaParaPorNaPrateleira. Em cada uma das implementações de Prateleira, poderá ter uma instanciação de Fruta diferente dentro do método criarFrutaNovaParaPorNaPrateleira(). Não tem nada haver com parâmetros. Quem define o tipo de objeto a ser criado são as diferentes implementações do método fábrica abstrato. Cada implementação de Prateleira, instancia um tipo de Fruta diferente.
     
    Agora se você quer passar um parâmetro para o método getFruta, para retornar por exemplo uma melancia com id tal, isso é irrelevante para o padrão. O padrão explica o processo de criação e não de retorno de objetos.
  • Suponha que tenho a classe abstrata Pessoa, e 2 subclasses Homen e Mulher que extendem a classe Pessoa. (abstrai a classe, o que vale é o conceito).

    Agora vamos a nossa CLASSE DE DECISÃO, conforme o enunciado:

    public class FactoryPessoa {
         public Pessoa getPessoa(String nome, String sexo){
              if(sexo.equals("H")){
                     return new Homem(nome);
              }
              if(sexo.equals("M")){
                     return new Mulher(nome);
              }
         }
    }

    percebeu o uso do parâmetro?

    Acredito que vc esteja se prendendo muito ao termo "INTERFACE" do conceito de Factory Method!

    Fonte: Prof. Pedrosa
  • Como já colocado, o FactoryMethod torna possível a criação de famílias de objetos relacionados sem especificar classes concretas(deixando para as subclasses decidirem quais objetos criar). Na situação colocada abaixo pelo colega, como eu vou saber como saudar corretamento o homem, do sexo masculino, Sr, e a mulher, do sexo feminino, Sra??? Hora, passando um parâmetro, M ou F.

    Poderiamos colocar essa logica em tempo de execuco; o ruim dissso são os vários ifs e elses no cliente q poluem e tornam o codigo de dificil manutencao. Assim, temos toda a logica de decisao na factory(mostrada abaixo).




  • Roger, 

    Acho que você quis dizer Abstract Factory não?