terça-feira, 9 de novembro de 2010

Abstract Factory Pattern



Definição

O padrão Abstract Factory é um padrão de criação que está relacionado com o
padrão Factory Method, mas ele acrescenta outro nível de abstração. O que isso significa é que o padrão encapsula um grupo de ConcreteFactory e classes individuais (ao contrário dos métodos ConcreteFactory, que são derivadas de subclasses) que compartilham de interfaces comuns. O software do cliente usa o resumo de fábrica que fornece uma interface para criar famílias de objetos relacionados ou objetos dependentes sem especificar suas classes concretas. Esse padrão separa os detalhes da implementação de um conjunto de objetos a partir do seu uso geral.

Quando usar

O padrão pode ser utilizado quando precisamos criar conjuntos de objetos que compartilham um tema comum e onde o cliente só precisa saber como lidar com a equivalência abstrata desses objetos, ou seja, a aplicação não é
importante para o cliente. O Abstract Factory é frequentemente empregado quando há necessidade de usar diferentes conjuntos de objetos e onde os objetos podem ser adicionados ou alterados em algum tempo durante a vida de um aplicativo.

Benefícios

O uso deste padrão torna possível o intercâmbio entre as classes concretas sem alterar o código, mesmo em tempo de execução.





Desvantagens / consequências

Tal como acontece com padrões de projeto similar, um dos principais inconvenientes é a possibilidade de complexidade desnecessária e trabalho extra na redação inicial do código.

 


Exemplo

Poderíamos ter uma classe abstrata que fornece interfaces InsuranceCreator
para criar uma série de produtos (createCarInsurance (por exemplo),
createHomeInsurance (), createPersonalInsurance ()). Qualquer número de classes concretas derivadas da classe InsuranceCreator podem ser criados, por exemplo CheapInsuranceCreator, ExpensiveInsuranceCreator ou ScamInsuranceCreator, cada um com uma aplicação diferente da createCarInsurance (), createHomeInsurance () e createPersonalInsurance () que criaria um objeto correspondente como CheapCarInsurance, ExpensiveHomeInsurance ou ScamPersonalInsurance. Cada um destes produtos é derivado de uma simples classe abstrata como CarInsurance, HomeInsurance ou PersonalInsurance de qual o cliente está ciente.
O código do cliente receberia uma instância adequada do InsuranceCreator e chamaria seus métodos de fábrica. Cada um dos objetos resultantes seria criado a partir da mesma implementação InsuranceCreator e com um tema em comum (todos eles seriam baratos, caros ou objetos scam). O cliente precisa saber apenas  como lidar com o resumo da classe CarInsurance, HomeInsurance ou PersonalInsurance, não a versão específica que tem
da fábrica.

Nenhum comentário:

Postar um comentário