Tags: , | Categories: Padrões de Projeto Posted by Rafael on 03/01/2011 21:30 | Comentários (2)

Antes de qualquer coisa, quero nesse primerio post de 2011, desejar a todos vocês que acompanham o meu blog um Feliz 2011 com muita paz, saúde, sucesso e felicidade! Que Deus abençoe a todos vocês e os guie e guarde sempre!

Hoje falaremos sobre um dos padrões mais utilizados, o padrão Factory Method. Também conhecido como Virtual Constructor, tem por objetivo definir uma interface para a criação de um objeto, delegando a decisão sobre qual classe instanciar para as subclasses.

Já fizemos uso do padrão Factory Method tanto quando implementamos o padrão Abstract Factory, quanto quando implementamos o padrão Adapter. Além desses, o padrão Factory Method é utilizado na implementação de vários outros padrões. Isso demonstra o quão utilizado é o padrão Factory Method.

Utilizamos o padrão Factory Method quando queremos separar a lógica que define qual classe instanciar do aplicativo cliente, ou seja, a classe ou aplicativo cliente invoca um método de uma subclasse que retorna a instancia de uma outra classe de acordo com uma lógica específica, encapsulando assim o conhecimento sobre qual classe deve ser instanciada. A classe cliente tem apenas o conhecimento de quando criar a classe desejada, mas não possui o conhecimento de qual classe criar ou como a criar.

O padrão Factory Method segue o seguinte padrão:

Vou utilizar o exemplo o post anterior, para facilitar. Você pode baixar o código fonte do exemplo aqui.

Vamos analisar os objetos do exemplo:

 

Program.cs

class Program

{

    static void Main(string[] args)

    {

        ITerminal34 terminal = ComponenteHidraulicoFactories.ObterTerminal();

        terminal.Acoplar();



        Console.ReadKey();

    }

}

 

ComponenteHidraulicoFactories.cs

public class ComponenteHidraulicoFactories

{

    public static ITerminal34 ObterTerminal()

    {

        return new Adaptador12para34();

    }

}

 

ITerminal34.cs

public interface ITerminal34

{

    void Acoplar();

}

 

Adaptador12para34.cs

public class Adaptador12para34 : ITerminal34

{

    public void Acoplar()

    {

        Torneira12.Acoplar12();

    }

}

 

A classe Program (cliente) determina o momento (quando) em que uma instância de uma classe do tipo ITerminal34 deve ser criada, mas não como ou qual deve ser criada. Isso cabe ao método ObterTerminal() da classe ComponenteHidraulicoFactories, que retorna uma instância de Adaptador12para34, que por sua vez, implementa a interface ITerminal34.

O método ObterTerminal() da classe ComponenteHidraulicoFactories implementa o padrão Factory Method pois encapsula a logica de qual classe instanciar e como ela é instanciada, retornando apenas a instancia da classe escolhida, já criada.

Esse é o Factory Method. Um padrão simples e muito utilizado.

Até a próxima!

Comentários

Ana Carla Brazil on 08/01/2011 22:17 Oi  Rafa...

Eu que sou de infra... já estou entendendo tudo de "adapters", seus  posts são muito claros e de fácil compreensão... Parabéns!

Beijinhos.
fortherecordpublishing.com on 21/03/2014 14:54 Pingback from fortherecordpublishing.com

Baseball Superstars 2013 Cheats :  : For The Record Publishing
Os comentários estão fechados