A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrão Abstract Factory

Apresentações semelhantes


Apresentação em tema: "Padrão Abstract Factory"— Transcrição da apresentação:

1 Padrão Abstract Factory
Projeto de Sistemas de Software Hazel Carvalho Crato

2 Sumário Abstract Factory Propósito Motivação Aplicabilidade Estrutura
Participantes Colaborações Conseqüências Exemplo de Código © LES/PUC-Rio

3 Abstract Factory É classificado como um padrão de criação, também conhecido como Kit. Propósito Prover uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. © LES/PUC-Rio

4 Motivação Exemplo 1: © LES/PUC-Rio

5 Motivação Exemplo 2: © LES/PUC-Rio

6 Motivação Diferentes padrões look-and-feel definem diferentes aparências (look) e comportamentos (feel) para um widget de uma interface de usuário. Exemplos: barras de rolagem, janelas, botões etc. Para ser portável através dos padrões look-and-feel, uma aplicação não deve instanciar os widgets diretamente de suas classes concretas para uma aparência ou comportamento particular. Para facilitar a alteração da aparência e do comportamento futuramente, defina uma classe abstrata GUIFactory que declara uma interface para criar cada tipo de widget básico. Defina ainda uma interface para cada tipo de widget e subclasses concretas que implementam widgets para um específico padrão look-and-feel. Different look-and-feel standards define different appearances (look) and behaviors (feel) for user interface widgets like scroll bars, windows, and buttons. To be portable across look-and-feel standards, an application should not instantiate its user interface widgets directly from their concrete classes for a particular look and feel. To make it easier to change the look and feel later, define an abstract WidgetFactory class that declares an interface for creating each basic kind of widget. There's also an abstract class for each kind of widget, and concrete subclasses implement widgets for specific look-and-feel standards. © LES/PUC-Rio

7 Motivação A interface de GUIFactory possui uma operação que retorna um novo widget concreto para cada widget abstrato. Há uma sub-classe concreta de GUIFactory para cada padrão look-and-feel. Cada sub-classe implementa as operações para criar o widget apropriado para o respectivo look-and-feel. Clientes criam os widgets apenas através da GUIFactory sem saber quem são widgets concretos para um específico look-and-feel. Uma GUIFactory reforça as dependências entre as classes concretas de widgets. WidgetFactory's interface has an operation that returns a new widget object for each abstract widget class. There is a concrete subclass of WidgetFactory for each look-and-feel standard. Each subclass implements the operations to create the appropriate widget for the look and feel. Clients create widgets solely through the WidgetFactory interface without knowing the concrete widget subclasses for a particular look and feel. A WidgetFactory enforces dependencies between the concrete widget classes. © LES/PUC-Rio

8 Aplicabilidade O padrão deve ser usado quando:
Um sistema deve ser implementado independente de como os produtos são criados, compostos e representados. Um sistema deve ser configurado com uma das múltiplas famílias de produtos. Uma familia de um produto relacionado é projetada para ser utilizada junta, e faz-se necessário o reforço dessa restriçao. Deseja-se prover uma biblioteca de classes de produtos e deseja-se revelar apenas as suas interfaces, mas não suas implementações. a system should be independent of how its products are created, composed, and represented. a system should be configured with one of multiple families of products. a family of related product objects is designed to be used together, and you need to enforce this constraint. you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations. © LES/PUC-Rio

9 Estrutura © LES/PUC-Rio

10 Participantes AbstractFactory ConcreteFactory AbstractProduct
Declara uma interface para operações que criam produtos abstratos. ConcreteFactory Implementa as operações para criar produtos concretos. AbstractProduct Declara uma interface para um tipo de produto. ConcreteProduct Define um produto a ser criado pela fábrica concreta correspondente. Implementa a interface AbstractProduct. Client Usa apenas interfaces declaradas pelas classes AbstractFactory e AbstractProduct. © LES/PUC-Rio

11 Colaborações Normalmente uma única instância da classe ConcreteFactory é criada em tempo de execução. AbstractFactory delega a criação de produtos concretos para a respectiva subclasse ConcreteFactory. A classe ConcreteFactory cria produtos que possuem uma implementação particular, por exemplo: todos os widgets de uma WinFactory concreta. Normally, a single instance of a ConcreteFactory class is created at run-time. AbstractFactory defers creation of product objects to its ConcreteFactory subclass. The concrete factory creates product objects having a particular implementation. © LES/PUC-Rio

12 Conseqüências Vantagens Desvantagem
Abstract Factory isola classes concretas. Facilita o intercâmbio de famílias de produtos. Promove consistência entre produtos. Desvantagem Suporte a novos tipos de produtos é dicífil. It isolates concrete classes. Abstract Factory helps you control the classes of objects that an application creates by isolating clients from implementation classes. Clients manipulate instances through their abstract interfaces. It makes exchanging product families easy. Since the class of a concrete factory appears only once in an application, the application can use different product configurations simply by changing the concrete factory. It promotes consistency among products. Abstract Factory makes it easy to enforce that an application uses objects designed to work together from only one family at a time. Supporting new kinds of products is difficult. Supporting new kinds of products requires extending the factory interface, which involves changing the AbstractFactory class and all its subclasses. © LES/PUC-Rio

13 Exemplo de Código

14 Estrutura © LES/PUC-Rio

15 Abstract Factory © LES/PUC-Rio

16 Concrete Factory © LES/PUC-Rio

17 Abstract Product © LES/PUC-Rio

18 Concrete Product © LES/PUC-Rio

19 Transfer Object © LES/PUC-Rio

20 Client © LES/PUC-Rio

21 Perguntas?


Carregar ppt "Padrão Abstract Factory"

Apresentações semelhantes


Anúncios Google