Builder é um padrão de projeto de software criacional 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.
O padrão Builder pode ser utilizado em uma aplicação que converte o formato de texto 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.
A implementação da solução para esse problema pode ser realizada através de uma classe de leitura (director) associada a uma classe capaz de converter o formato RTF para outra representação (builder). 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 e etc. Para cada formato de texto suportado é criada uma classe de conversão especializada (concrete builder). Um conversor para formato ASCII, por exemplo, poderia ignorar qualquer requisição para converter tokens que não fossem caracteres comuns. Um conversor para o formato PDF, por outro lado, iria processar qualquer requisição para poder converter o estilo, além do texto.
- Permite variar a representação interna de um produto;
- Encapsula o código entre construção e representação;
- Provê controle durante o processo de construção.
- Requer criar um concrete builder específico para cada instância diferente do produto.
O padrão Builder é muitas vezes comparado com o padrão Abstract Factory pois ambos podem ser utilizados para a construção de objetos complexos. A principal diferença entre eles é que o Builder constrói objetos complexos passo a passo e procura evitar ser um anti-padrão, enquanto o Abstract Factory constrói famílias de objetos, simples ou complexos, de uma só vez - e permite polimorfismo.
O padrão Builder, da forma como foi descrito no livro Design Patterns: Elements of Reusable Object-Oriented Software, contém os seguintes elementos:
- director — constrói um objeto utilizando a interface do builder;
- builder — especifica uma interface para um construtor de partes do objeto-produto;
- 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 acabado de construir. Inclui classes que definem as partes constituintes.
- Download the latest .NET Core SDK
- Clone this repo to your local machine using
https://github.com/BrunoLopes/Xperiments.DesignPatterns.Interpreter
Restore all the packages first
$ dotnet restore
now build the project
$ dotnet build
Reach out to me at one of the following places!
- Website:
- Email: emfyit@gmail.com
- MIT license
- Copyright MFY IT © 2017