Artigos

Padrão de Projeto Abstract Factory

Escrito por Thiago Leite. Posted in Blog

Neste momento me apetece escrever sobre Software Design Patterns. Não que eu seja um grande programador, mas eu preciso treinar o conteúdo e acho que farei bem escrever enquanto estudo. Vou inaugurar então com este post a sessão Software Design Patterns no blog, onde irei em cada post falar sobre algum modelo para a padronização do código.

O primeiro Software Design Pattern, ou em bom português, Padrões de Projeto de Software, que irei falar é Abstract Factory.

Abstract Factory

Objetivo – definir uma interface para a criação de famílias de objetos relacionados ou dependentes, não fazendo uso do acesso direto as classes concretas. Através do uso de Abstract Factory é possível criar aplicações que diante variáveis do ambiente possam criar diferentes objetos através de métodos em comum.

Um exemplo comum é a criação de diferentes tipos de interfaces gráficas por uma aplicação através da detecção do tipo de ambiente a qual a aplicação está e execução. Outro exemplo, que será aqui demonstrado, é a criação de um objeto do tipo Customer ou Staff mediante a verificação da opção que o utilizador escolheu durante o cadastro. O modelo UML para o exemplo segue abaixo.

Segue o código em C++ que testa o Desing Pattern Abstract Factory.

abstract class PersonFactory {

public static PersonFactory getFactory(){

if( Form.isCustomerOrStaff() == “Customer” ){

return new CustomerFactory();

} else {

return new StaffFactory();

}

}

public abstract Person createPerson();

}

class CustomerFactory extends PersonFactory {

public Person createPerson() {

return new Customer();

}

} 

class StaffFactory extends PersonFactory {

public Person createPerson() {

return new Staff();

}

}

abstract class Person {

public abstract void flush();

}

class Customer extends Person {

public void flush() {

System.out.println(“Storing customer data!“);

}

}

class Staff extends Person {

public void flush() {

System.out.println(”Storing staff data!“);

}

}

public class Form {

public static void main(String[] args) {

PersonFactory factory = PersonFactory.getFactory();

Person person = factory.createPerson();

person.flush();

}

}

O exemplo acima se inicia na classe Form. Após verificada qual a opção que foi escolhida durante o cadastro, a classe PersonFactory retorna um objeto estático capaz de criar objetos do tipo a qual foi pedido no formulário. Por fim, as classes concretas possuem sobreposição do método abstrato flush para a gravação dos dados (o que no código do exemplo não ocorre, se resumindo a mostrar uma mensagem).

Caso o exemplo acima seja demasiado simples, aqui e aqui você poderá obter outros cenários de uso do padrão de projeto Abstract Factory.

Até o próximo Desing Pattern!