Um programador deve criar um novo projeto que envolva vários...

Próximas questões
Com base no mesmo assunto
Q491565 Arquitetura de Software
Um programador deve criar um novo projeto que envolva vários tipos de produtos com as mesmas funções, mas com peculiaridades diferentes. Por exemplo, o produto do tipo gold realiza as mesmas funções que o produto standard, mas, a cada uma delas, armazena a última configuração para fornecer uma memória para o usuário. O padrão apropriado para representar as classes deste projeto é o
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a B - Strategy. Agora, vamos entender por que essa é a resposta certa e por que as outras alternativas estão incorretas.

Por que a alternativa B está correta?

O padrão Strategy é utilizado quando você precisa definir uma família de algoritmos, encapsulá-los e torná-los intercambiáveis. O padrão Strategy permite selecionar dinamicamente a implementação de um algoritmo que um objeto usa. Isso se encaixa perfeitamente no cenário descrito na questão, onde diferentes produtos (como o gold e o standard) realizam as mesmas funções, mas têm comportamentos específicos.

No caso apresentado, você pode ter uma interface comum para os produtos e várias implementações concretas dessa interface, onde cada implementação lida com as particularidades de cada tipo de produto.

Por que as outras alternativas estão incorretas?

A - Facade: O padrão Facade é usado para fornecer uma interface simplificada para um subsistema complexo. Ele não é adequado para representar classes com o mesmo comportamento, mas com peculiaridades diferentes. O Facade visa ocultar a complexidade do sistema, mas não permite a intercâmbiabilidade de comportamentos específicos.

C - Proxy: O padrão Proxy é utilizado para fornecer um substituto ou ponto intermediário para acessar um objeto. Ele é útil para controlar o acesso a um objeto, por exemplo, para adicionar controle de acesso, aumentar o desempenho via cache, ou implementar lazy initialization. No entanto, ele não trata de diferentes implementações de um mesmo comportamento, como é necessário no caso da questão.

D - Iterator: O padrão Iterator é usado para permitir a travessia sequencial de uma coleção sem expor sua representação subjacente. Ele não se aplica ao problema de ter várias implementações de produtos com comportamento semelhante, mas com peculiaridades diferentes. O Iterator é mais relacionado à navegação de coleções, como listas ou árvores.

E - Singleton: O padrão Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Embora seja útil para gerenciar recursos compartilhados ou configurações globais, ele não resolve o problema de ter várias implementações de um mesmo comportamento com peculiaridades específicas. Além disso, o Singleton é mais voltado para a restrição da criação de instâncias, não para a intercâmbiabilidade de algoritmos.

Com isso, concluímos que a alternativa B - Strategy é a mais adequada para o cenário apresentado, pois permite criar uma interface comum com múltiplas implementações que diferem nos detalhes de comportamento, atendendo perfeitamente à necessidade de variação nas funcionalidades dos diferentes tipos de produtos.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

O padrão Strategy é ideal para quando você tem produtos com funções semelhantes, mas com detalhes diferentes. Ele ajuda a organizar o código, facilitar a reutilização e aumentar a flexibilidade.

Pense em um "molde" com peças pré-fabricadas que você adapta para cada produto.

Facade:

  • O padrão de projeto Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. Ele define uma interface de nível mais alto que facilita o uso do subsistema, ocultando os detalhes de implementação subjacentes. O Facade promove o princípio de design de baixo acoplamento, permitindo que os clientes interajam com o sistema de forma mais simples e intuitiva.

Singleton:

  • O padrão de projeto Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Isso é útil em situações em que você deseja restringir a criação de objetos de uma determinada classe a uma única instância, como por exemplo, para compartilhar recursos comuns ou manter configurações globais.

Iterator:

  • O padrão de projeto Iterator fornece uma maneira de acessar elementos de uma coleção de objetos de forma sequencial, sem expor a estrutura interna da coleção. Ele permite percorrer uma coleção de objetos de forma padronizada, sem depender de detalhes de implementação específicos da coleção.

Proxy:

  • O padrão de projeto Proxy fornece um substituto ou um placeholder para outro objeto, controlando o acesso a ele. Ele é útil quando você deseja adicionar funcionalidades adicionais ao acesso de um objeto, como controle de acesso, lazy initialization, logging ou cache.

Strategy:

  • O padrão de projeto Strategy permite que você defina uma família de algoritmos, encapsule cada um deles e os torne intercambiáveis. Isso permite que o algoritmo varie independentemente dos clientes que o utilizam. O Strategy é útil quando você deseja que um objeto seja capaz de mudar seu comportamento em tempo de execução.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo