Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Abstract Factory

School Presentation
by

Bruno Tereso

on 19 May 2011

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Abstract Factory

Abstract Factory padrões de desenho de software André Guerra
Bruno Tereso
Fábio Matos
Joel Costa Padrões de Desenho? O que são? Padrões de desenho são métodos que facilitam a criação de objectos em desenvolvimento de software orientado a objectos. A implementação de um padrão de desenho torna a reutilização de código, numa tarefa mais simples, estabelecendo soluções válidas para cada problema.
Através de um conjunto de objectos previamente construídos, é possível compor uma representação gráfica e funcional para um sistema, independentemente de como cada objecto é criado. Para que serve? Padroes de Desenho? Segundo o “Gang of Four”, este padrão fornece um interface que permite criar familias de objectos, relacionados ou independentes, sem que seja preciso especificar uma class em concreto.

Um dos métodos mais usados, um dos mais confusos. O padrão Abstract Factory? Abstract Factory? Abstract factory é uma class, com vários métodos factory. Basicamente, esta class tem uma colecção de métodos Factory que criam objectos concretos consoante o sistema aplicável. Simplificando Cada uma das subclasses deste método, implementa uma Factory com solução para uma família de produtos.
O Abstract Factory é por vezes considerado uma extensão do padrão Factory. Abstract Factory? Como? Uma extensão? Em vez de usar-mos um método para criação (Factory Method), temos um objecto (Abstract Factory) e usamos este objecto para chamar os métodos de criação apropriados. Diferenças para o Factory? Exemplo Para look-and-feel diferentes (Windows, Mac, Linux, etc) temos formas diferentes de manipular janelas, scrollbars, menus, etc.
Para que suporte qualquer look-and-feel, precisamos de uma forma simples de criar objectos (relacionados) de uma mesma família.
Estes objectos são dependentes porque, por exemplo, não posso criar uma janela estilo Windows e um menu estilo Mac. Aplicação prática Na criação de automóveis, o abstract factory seria ideal. Primeiro cria-se uma classe que montava os componentes necessários de um carro em geral (Chassi, motor, rodas, portas...). Esta classe iria receber as factory Exemplo2 Aplicação prática que especificam os componentes do carro. Por exemplo na factory de um Peugeot 206, este devolve à classe que monta o carro todas as especificações necessárias para a construção correcta do carro. Vantagens O isolamento de algumas classes concretas ao cliente:
Este padrão ajuda a controlar as classes criadas pela aplicação.Quando é encapsulada a responsabilidade e o processo de criação dos objectos, os clientes são isolados das classes de implementação. Assim os cliente só podem manipular as instâncias através das suas interfaces abstractas; O abstract factory tem como vantagens: A facilidade de mudança na familia do produto:
Independetemente de qualquer que seja o código produzido por o cliente, as interfaces abstractas não mudam regularmente. Como o abstract factory cria uma familia de produtos, toda familia muda quando a factory utilizada é mudada. Vantagens O abstract factory tem como vantagens: O abstract factory tem como vantagens: A grande consistência entre produtos
Certifica- se que os produtos certos são usados juntos.Quando os objectos numa família são projectados para trabalharem juntos, é importante que uma aplicação use objectos só de uma família de cada vez. Vantagens Desvantagens Isolamento das classes concretas do cliente
Estender fábricas abstratas para produzir novos tipos de produtos não é fácil. O suporte de novos tipos de produtos exige estender a interface da fábrica, o que envolve mudar a classe Abstract Factory e todas as suas subclasses. O abstract factory tem como desvantagens: quando um sistema deve ser independente de como os seus produtos são criados, compostos e representados;
quando um sistema deve ser configurado entre várias famílias de produtos;
quando se deve implementar essa restrição quando uma família de produtos relacionados foi projectada para uso conjunto;
quando se quer fornecer uma biblioteca de classes e revelar sua interface e não sua implementação, não permitindo assim criar objectos directamente com “new”; O abstract factory aplica-se: Exemplo de uma estrutura diagrama de classes public abstract class Fabricante {
protected String name;

public abstract Carro getCarro( String marca );
public static Fabricante getInstance( String fabricante ) {
if( fabricante == null ) {
return null;
}
else if(fabricante.equals("Chevrolet")) {
return new Chevrolet();
}
else if(fabricante.equals("Volkswagen")) {
return new Volkswagen();
} else {
return null;
}
}
} Exemplo de uma estrutura código fonte public class Chevrolet extends Fabricante {

public Chevrolet() {
name = "Chevrolet";
}

public Carro getCarro( String marca ) {

if( marca == null ) {
return null;
} else if( marca.equals("Vectra") ) {
return new Vectra();
} else if( marca.equals("Omega") ) {
return new Omega();
} else {
return null;
}
}
} código fonte Exemplo de uma estrutura public class Volkswagen extends Fabricante {

public Volkswagen() {
name = "Volkswagen";
}

public Carro getCarro( String marca ) {

if( marca == null ) {
return null;
} else if( marca.equals("Gol") ) {
return new Gol();
} else if( marca.equals("Golf") ) {
return new Golf();
} else {
return null;
}
}
} Exemplo de uma estrutura código fonte Exemplo de uma estrutura utilização das classes public class AbstractFactoryExample {

public static void main( String args[] ) {

//parâmetro passado como argumento no console
//pega a instância do fabricante
Fabricante fab = Fabricante.getInstance( args[0] );

//pega a instância do carro, de acordo com o fabricante
Carro carro = fab.getCarro( args[1] );

//mostra o valor
if( carro != null ) {
System.out.println( "Preço: " + carro.getPreco() );
}
}
}
Full transcript