Você está na página 1de 16

Padrões de Projeto

Builder

Aluno(s): Alexandre, Paulo


Professor: Geraldo Valeriano
O que é o Builder?
 É um padrão de projeto de software
que permite a separação da
construção de um objeto complexo
da sua representação, de forma que
o mesmo processo de construção
possa criar diferentes
representações.
Para melhor compreensão!
 E necessário estar apto com OO E
UML
Estrutura - UML
Compreendendo a (Estrutura)
 director — constrói um objeto
utilizando a interface do builder;
 builder — especifica uma interface
para um construtor de partes do
objeto-produto;
Continuação...
 concrete builder — define uma
implementação da interface builder,
mantém a representação que cria e
fornece interface para recuperação
do produto;
 product — o objeto complexo em
construção. Inclui classes que
definem as parte constituintes.
Exemplo de Utilização
 O padrão Builder pode ser utilizado
em uma aplicação que converte o
formato RTF para uma série de
outros formatos e que permite a
inclusão de suporte para conversão
para outros formatos, sem a
alteração do código fonte do leitor
de RTF.
RTF - é um formato de arquivo de documento desenvolvido e de
propriedade da Microsoft desde 1987 para intercâmbio de
documentos entre diversas plataformas, suporta gráficos.
Continuação... Exemplo
 O objeto da classe de leitura lê cada
token do texto e executa o método
apropriado no objeto de conversão,
de acordo com tipo do token. A
classe de conversão possui um
método para cada tipo de token,
incluindo os caracteres comuns,
parágrafos, fontes etc...
Tokens são os padrões que ocorrem em uma string, por exemplo: em
uma data, 29/03/1991, poderia utilizar dois tokens para dividir a string
em três partes, utilizando a barra / como padrão.
Diagrama
Código

 Este código, escrito na linguagem


Java, mostra a implementação do
diagrama mostrado acima.
public class Cliente {
public static void main(String[] args) {
ConversorTexto conversor;
if (args[0].equals("pdf"))
{
conversor = new ConversorPDF();
}
else if (args[0].equals("tex"))
{
conversor = new ConversorTeX();
}
else
{
conversor = new ConversorASCII();
}
LeitorRTF leitor = new LeitorRTF(conversor);
leitor.lerRTF();
}
}
class LeitorRTF {
private ConversorTexto conversor;
LeitorRTF(ConversorTexto c)
{
this.conversor = c;
}
public void lerRTF() {
List<Token> tokens =obterTokensDoTexto();
for (Token t : tokens) {
if (t.getTipo() == Token.Tipo.CARACTERE) {
conversor.converterCaractere(t.getCaractere());
}
if (t.getTipo() == Token.Tipo.PARAGRAFO) {
conversor.converterParagrafo();
}
if (t.getTipo() == Token.Tipo.FONTE) {
conversor.converterFonte(t.getFonte());
}
}
}
}
abstract class ConversorTexto {
public void converterCaractere(char c) {
// vazio
}
public void converterParagrafo() {
// vazio
}
public void converterFonte(Fonte f) {
// vazio
}
}
class ConversorPDF extends ConversorTexto {
public void converterCaractere(char c)
{
System.out.print("Caractere PDF");
}
public void converterParagrafo()
{
System.out.print("Parágrafo PDF");
}
public void converterFonte(Fonte f)
{
System.out.print("Fonte PDF");
}
}
class ConversorTeX extends ConversorTexto {
public void converterCaractere(char c)
{
System.out.print("Caractere Tex");
}
public void converterParagrafo()
{
System.out.print("Paragrafo Tex");
}
public void converterFonte(Fonte f)
{
System.out.print("Fonte Tex");
}
}
class ConversorASCII extends ConversorTexto {
public void converterCaractere(char c)
{
System.out.print("Caractere ASCII");
}
}

Você também pode gostar