Padrões de criação

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, vamos aprender um pouco mais sobre os padrões de projeto criacionais.


Ao final da aula, entenderemos melhor o que são os padrões criacionais e quando utilizá-los.

Em algumas situações a informação necessária para criação de certos objetos no programa é externa aos objetos, e é obtida da combinação dos estado de vários outros objetos.


Isso pode acontecer por diversos motivos, sendo alguns dos mais comuns:


  • A presença de várias classes com características similares que são usadas dependendo de um contexto.
  • A necessidade de centralização de estado de um certo tipo em uma única instância.

Para resolver esses problemas, recorremos aos padrões de projeto criacionais.


Esses padrões lidam com a criação de objetos de forma controlada, permitindo a criação de objetos complexos de maneira flexível, eficiente e organizada.

A ideia aqui é delegar a tarefa de criação de certos tipos de objetos a uma classe especial, que possui o conhecimento necessário para criar e manipular o estado dos objetos sob sua responsabilidade.


O nome e papel dessa classe especial vão depender do padrão utilizado.

Vejamos alguns exemplos:

Factory method

Delega a criação de objetos a uma "fábrica", que produz instâncias que compartilham de uma mesma interface.

A fábrica encapsula o conhecimento para criação dos objetos e conhece o contexto necessário para criar os objetos corretos e em um estado apropriado.

Dessa forma, não é necessário saber o tipo exato do objeto que será criado, apenas que ele atenderá a necessidade do contexto dado à fabrica.

Singleton

Restringe a instanciação de uma classe a um único objeto.

A classe não fornece um construtor público e mantém uma única instância, que pode ser solicitada.

Dessa forma, pode-se manter um controle de estado global no programa quando for necessário.

Object pool

Mantém uma reserva (pool) de objetos instanciados que podem ser reaproveitados após utilizados.

Frequentemente implementado como um tipo particular de Singleton.

Dessa forma, podem ser economizados recursos computacionais envolvidos na criação e destruição dos objetos complexos.

A medida que temos mais classes a nossa disposição para realizar as mais diversas tarefas, torna-se mais produtivo realizar a composição de classes em estruturas mais complexas. Assim o uso de padrões de criação torna-se relevante e muitas vezes indispensável.


Outros padrões desse tipo incluem:

Perguntas:

  1. Dê um exemplo de situação onde podemos aplicar o padrão singleton.
  2. Que problemas podem ser encontrados na aplicação do padrão Object pool?

Até a próxima aula!