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

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

Padrão Builder Juliana França Santos Aquino. © LES/PUC-Rio Sumário Builder –Introdução/Propósito –Motivação –Aplicabilidade –Estrutura –Participantes.

Apresentações semelhantes


Apresentação em tema: "Padrão Builder Juliana França Santos Aquino. © LES/PUC-Rio Sumário Builder –Introdução/Propósito –Motivação –Aplicabilidade –Estrutura –Participantes."— Transcrição da apresentação:

1 Padrão Builder Juliana França Santos Aquino

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

3 © LES/PUC-Rio Introdução/Propósito -Um tipo de padrão criacional –Classificação GoF -Abstraem o processo de criação de objetos -Separar a construção de um objeto complexo da sua representação -O mesmo processo de construção possa criar diferentes apresentações -Criar passo a passo objetos mais complexos

4 © LES/PUC-Rio Motivação (1/3) Um leitor de documentos RTF (Rich Text Format) deveria ser capaz de converter RTF em outros formatos de texto: –ASCII –TeX –HTML –etc. O número de conversões está aberto Facilidade de acrescentar uma nova conversão sem modificar o leitor

5 © LES/PUC-Rio Motivação (2/3) RTFReader ParseRTF() ASCIIConverter ConverterCharacter(char) GetASCIIText() TextConverter ConverterCharacter(char) ConvertFontChange(Font) ConvertParagraph() TeXConverter ConverterCharacter(char) ConvertFontChange(Font) ConvertParagraph() GetTeXText() HTMLConverter ConverterCharacter(char) ConvertFontChange(Font) ConvertParagraph() GetHTMLText() ASCIITextTeXText HTMLText while (t = get the next token) { switch t.Type { CHAR: builder->ConvertCharacter(t.Char) FONT: builder->ConvertFontChange (t.Font) PARA: builder->ConvertParagraph() }

6 © LES/PUC-Rio Aplicabilidade O objeto de construção deve permitir diferentes representações para o objeto que é construído O algoritmo para criação de um objeto complexo deve ser independente das partes que compõem o objeto e de como elas são montadas –Cliente quer construir uma casa/prédio e o builder sabe como construir a casa/prédio (ela é composta de vários passos)

7 © LES/PUC-Rio Estrutura Director Construct() Builder BuildPart() ConcreteBuilder BuildPart() GetResult() Product for all objects in structure { builder->BuildPart() }

8 © LES/PUC-Rio Participantes (1/2) Builder (TextConvert) –Especifica uma interface abstrata para criação de partes de um objeto-produto ou criação de diferentes representações ConcreteBuilder (ASCIIConverter, TeXConverter, HTMLConverter) –Constrói partes do produto pela implementação da interface do Builder –Define e mantém a representação que cria –Fornece uma interface para recuperação do produto (GetASCIIText)

9 © LES/PUC-Rio Participantes (2/2) Director (RTFReader) –Constrói um objeto usando a interface do Builder Product (ASCIIText, TeXText, HTMLText) –Representa o objeto complexo em construção. ConcreteBuilder constrói a representação interna do produto e define o processo pelo qual ele é montado –Inclui classes que definem as partes constituintes, inclusive as interfaces para a montagem das partes no resultado final

10 © LES/PUC-Rio Colaborações (1/2) O cliente cria o objeto Director e o configura com o objeto Builder desejado Director notifica o construtor sempre que uma parte do produto deve ser construída/convertida Builder trata solicitações do diretor e acrescenta partes ao produto O cliente recupera o produto do construtor

11 © LES/PUC-Rio Colaborações (2/2) aClient aDirectoraConcreteBuilder new ConcreteBuilder() new Director (aConcreteBuilder) Construct () GetResult() BuildPartA() BuildPartB() BuildPartC()

12 © LES/PUC-Rio Conseqüências Permite variar a representação interna de um produto Isola o código para construção e representação Oferece um controle mais fino sobre o processo de construção

13 © LES/PUC-Rio Exemplo de Código (1/4) public class Cliente { public static void main(String[] args) { ConversorTexto conversor; if (args[0].equals("html")) conversor = new ConversorHTML(); else if (args[0].equals("tex")) conversor = new ConversorTeX(); else if (args[0].equals("ascii")) conversor = new ConversorASCII(); LeitorRTF leitor = new LeitorRTF(conversor); leitor.lerRTF(); }

14 © LES/PUC-Rio Exemplo de Código (2/4) class LeitorRTF { private ConversorTexto conversor; LeitorRTF(ConversorTexto c) { this.conversor = c; } public void lerRTF() { List tokens = obterTokensDoTexto(); for (Token t : tokens) { if (t.getTipo() == Token.Tipo.CARACTERE) conversor.converterCaractere(t.getCaractere()); if (t.getTipo() == Token.Tipo.PARAGRAFO) conversor.converterParagrafo(t.getParagrafo()); if (t.getTipo() == Token.Tipo.FONTE) conversor.converterFonte(t.getFonte()); }

15 © LES/PUC-Rio Exemplo de Código (4/4) class ConversorTeX extends ConversorTexto { public void converterCaractere(char c) { System.out.print("Caractere TeX"); } public void converterParagrafo() { System.out.print("Parágrafo TeX"); } public void converterFonte(Fonte f) { System.out.print("Fonte TeX"); } // Similar para ConversorHTML, ConversorASCII

16 © LES/PUC-Rio Exemplo de Código (3/4) abstract class ConversorTexto { public void converterCaractere(char c); public void converterParagrafo(Paragrafo p); public void converterFonte(Fonte f); }

17 Obrigada!


Carregar ppt "Padrão Builder Juliana França Santos Aquino. © LES/PUC-Rio Sumário Builder –Introdução/Propósito –Motivação –Aplicabilidade –Estrutura –Participantes."

Apresentações semelhantes


Anúncios Google