Um padrão de projeto nomeia, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-la útil para a criação de um projeto orientado a objetos reutilizável. Em relação a padrões de projeto, analise as afirmações a seguir.
É correto apenas o que se afirma em:
Aplicações gráficas, tais como editores de desenhos e sistemas de captura esquemática, permitem aos usuários construir diagramas complexos a partir de componentes simples. O usuário pode agrupar componentes para formar componentes maiores, os quais, por sua vez, podem ser agrupados para formar componentes ainda maiores. Uma implementação simples poderia definir classes para primitivas gráficas, tais como Texto e Linhas, além de outras classes que funcionam como recipientes (containers) para estas primitivas. Porém, há um problema com esta abordagem: o código que usa estas classes deve tratar objetos primitivos e objetos-recipientes de modo diferente, mesmo se na maior parte do tempo o usuário os trata de forma idêntica. Ter que distinguir entre estes objetos torna a aplicação mais complexa. Qual padrão de projeto descreve como usar a composição recursiva de maneira que os clientes não tenham que fazer esta distinção:
render
, cada palavra pode aparecer sem qualquer modificação de aspecto (utiliza-se o método render correspondente). É ainda possível modificar dinamicamente o aspecto das palavras, permitindo que sejam apresentadas em negrito, itálico e sublinhado, ou ainda em combinações variadas, como por exemplo, negrito e itálico ou itálico sublinhado. No entanto, a apresentação é sempre realizada da mesma forma, através do método render
.Considere um recurso de ajuda (help) sensível ao contexto para uma interface gráfica de usuário. O usuário pode obter informação de ajuda em qualquer parte da interface simplesmente pressionando o botão do mouse sobre ela. A ajuda que é fornecida depende da parte da interface que é selecionada e do seu contexto; por exemplo, um botão widget numa caixa de diálogo pode ter uma informação diferente de ajuda de um botão similar na janela principal. Se não houver uma informação específica de ajuda para aquela parte da interface, então o sistema de ajuda deveria exibir uma mensagem de ajuda mais genérica sobre o contexto imediato - por exemplo, a caixa de diálogo como um todo. Daí ser natural organizar a informação de ajuda de acordo com a sua generalidade - do mais específico para o mais genérico. Além do mais, está claro que uma solicitação de ajuda é tratada por um entre vários objetos da interface do usuário; qual objeto depende do contexto e de quão específica é a ajuda disponível. O problema aqui é que o objeto que na prática fornece a ajuda não é conhecido explicitamente pelo objeto (por exemplo, o botão) que inicia a solicitação de ajuda. O que necessitamos é uma maneira de desacoplar o botão que inicia a solicitação de ajuda dos objetos que podem fornecer a informação de ajuda. Qual padrão de projeto define como isso acontece:
Padrões de criação (creational patterns) abstraem a forma como objetos são criados, tornando o sistema independente da forma como os objetos são criados, compostos e representados. Um padrão de criação de classe usa a herança para variar a classe que é instanciada, enquanto que um padrão de criação de objeto delegará a instanciação para outro objeto. Há dois temas recorrentes nesses padrões. Primeiro, todos encapsulam conhecimento sobre quais classes concretas são usadas pelo sistema. Segundo, ocultam o modo como essas classes são criadas e montadas. Tudo que o sistema sabe no geral sobre os objetos é que suas classes são definidas por classes abstratas. Os padrões de criação são classificados em Abstract Factory, Builder, Factory Method, Prototype e Singleton. O padrão Abstract Factory é usado quando: