Title: Engenharia de Software / Padrões de Projeto - Gang of Four (GOG)
Tags: Engenharia_de_Software Resumo
On every note of this deck, unless a note says otherwise:
tldr: - Padrão (Pattern): modelo/solução testada e documentada para um problema recorrente; pode ser reutilizado muitas vezes, sem ser aplicado exatamente do mesmo jeito (ideia de Christopher Alexander).
- Design Patterns (GoF): descrições de classes/objetos e suas colaborações para resolver problemas genéricos de design em um contexto específico (normalmente o domínio/negócio), evitando “reinventar a roda”.
- Origem: padrões na arquitetura (Alexander, 1977) inspiraram a computação; em 1994 a Gang of Four consolidou 23 padrões OO em um livro clássico.
- Vantagens: reuso de soluções bem-sucedidas; vocabulário comum (melhora comunicação/documentação); melhor qualidade; incentivo a alta coesão e baixo acoplamento.
- Limitações/alertas: aplicar padrões pode aumentar a complexidade sem necessidade; alguns padrões podem ser simplificados/eliminados por recursos da própria linguagem.
- Cada padrão é descrito por 4 elementos: Nome, Problema, Solução e Consequências.
- Os 23 padrões GoF são para software orientado a objetos e se classificam em:
- Criacionais (criação de objetos): Abstract Factory, Builder, Factory Method, Prototype, Singleton
- Estruturais (composição/organização): Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
- Comportamentais (algoritmos/interação em runtime): Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor
- “Dicas de reconhecimento” (resumo do quadro final):
- Famílias de objetos → Abstract Factory; construção passo a passo → Builder; subclasses decidem → Factory Method; clonar protótipo → Prototype; uma instância global → Singleton
- adaptar interface incompatível → Adapter; separar abstração/implementação → Bridge; árvore parte-todo → Composite; adicionar responsabilidades dinamicamente → Decorator; interface simples para subsistema → Facade; compartilhar objetos → Flyweight; controlar acesso via substituto → Proxy
- cadeia de tratamento → Chain of Responsibility; encapsular requisição → Command; gramática/linguagem → Interpreter; percorrer coleção sem expor internals → Iterator; centralizar comunicação → Mediator; desfazer/restaurar estado → Memento; notificar dependentes → Observer; comportamento por estado → State; trocar algoritmo → Strategy; esqueleto com passos variáveis → Template Method; operações sobre estrutura sem alterar classes → Visitor
link: https://documentacao.online/estudos/i1uz.html
title: Padrões de Projeto - Gang of Four (GOG)

front: (CESPE / INPI – 2024) No padrão de projetos adapter, um algoritmo pode variar independentemente dos clientes que o utilizam, de modo a fornecer diferentes implementações de um mesmo comportamento.
response: Errado
comment: O padrão de projetos Adapter é usado para permitir que classes com interfaces incompatíveis trabalhem juntas, atuando como um intermediário que converte a interface de uma classe em outra interface esperada pelos clientes. O padrão que permite que um algoritmo varie independentemente dos clientes que o utilizam, fornecendo diferentes implementações de um mesmo comportamento, é o padrão Strategy.
Other fields (not shown on cards):
back: Errado - O padrão de projetos Adapter é usado para permitir que classes com interfaces incompatíveis trabalhem juntas, atuando como um intermediário que converte a interface de uma classe em outra interface esperada pelos clientes. O padrão que permite que um algoritmo varie independentemente dos clientes que o utilizam, fornecendo diferentes implementações de um mesmo comportamento, é o padrão Strategy.

front: (CESPE / BANRISUL – 2022) O objetivo do padrão Singleton é especificar os tipos de objetos a partir de uma instância de protótipo.
response: Errado
comment: Na verdade, o objetivo desse padrão é garantir que exista apenas uma única instância de uma determinada classe. Isso é conseguido assegurando que todas as solicitações para instanciar objetos dessa classe sejam direcionadas para a mesma instância. A questão trata do padrão Prototype!
Other fields (not shown on cards):
back: Errado - Na verdade, o objetivo desse padrão é garantir que exista apenas uma única instância de uma determinada classe. Isso é conseguido assegurando que todas as solicitações para instanciar objetos dessa classe sejam direcionadas para a mesma instância. A questão trata do padrão Prototype!

front: (CESPE / BANRISUL – 2022) Por meio do padrão Facade, é possível construir uma interface comum e simplificada para um sistema ou subsistema.
response: Correto
comment: Perfeito! Esse padrão oferece uma maneira simples e direta de acessar os recursos internos de um sistema ou subsistema, provendo uma única interface para o usuário, a qual fornece acesso a todos os recursos necessários. Dessa maneira, o usuário não precisa interagir diretamente com os subsistemas, facilitando e acelerando o processo.
Other fields (not shown on cards):
back: Correto - Perfeito! Esse padrão oferece uma maneira simples e direta de acessar os recursos internos de um sistema ou subsistema, provendo uma única interface para o usuário, a qual fornece acesso a todos os recursos necessários. Dessa maneira, o usuário não precisa interagir diretamente com os subsistemas, facilitando e acelerando o processo.

front: (CESPE / BANRISUL – 2022) O padrão de comportamento Command permite representar comandos como objetos, sem a necessidade de saber como a operação é executada.
response: Correto
comment: Perfeito! Esse padrão permite representar comandos como objetos, sem a necessidade de saber como a operação é executada. Ele é usado para encapsular todos os detalhes de uma operação, como parâmetros, contexto e estado, em um objeto. Isso permite que os clientes criem, armazenem e reutilizem objetos comandos para executar operações específicas. Dessa forma, os clientes não precisam saber como a operação é executada, pois isso é encapsulado pelo objeto de comando.
Other fields (not shown on cards):
back: Correto - Perfeito! Esse padrão permite representar comandos como objetos, sem a necessidade de saber como a operação é executada. Ele é usado para encapsular todos os detalhes de uma operação, como parâmetros, contexto e estado, em um objeto. Isso permite que os clientes criem, armazenem e reutilizem objetos comandos para executar operações específicas. Dessa forma, os clientes não precisam saber como a operação é executada, pois isso é encapsulado pelo objeto de comando.

front: (CESPE / Petrobrás - 2022) Os três principais padrões de projeto (design patterns) são os criacionais, os estruturais e os comportamentais; os padrões criacionais aumentam a flexibilidade e a reutilização de código porque oferecem diversas alternativas de criação de objetos.
response: Correto
comment: Perfeito! Os Padrões de Projeto podem ser classificados em Padrões Criacionais, Padrões Estruturais e Padrões Comportamentais. Ademais, os Padrões Criacionais abstraem o processo de criação de objetos a partir da instanciação de classes, logo aumenta-se a flexibilidade e a reutilização de código, concedendo mais alternativas para se criar objetos.
Other fields (not shown on cards):
back: Correto - Perfeito! Os Padrões de Projeto podem ser classificados em Padrões Criacionais, Padrões Estruturais e Padrões Comportamentais. Ademais, os Padrões Criacionais abstraem o processo de criação de objetos a partir da instanciação de classes, logo aumenta-se a flexibilidade e a reutilização de código, concedendo mais alternativas para se criar objetos.

front: (CESPE / Petrobrás - 2022) Design patterns é um conjunto de soluções generalistas para problemas recorrentes durante o desenvolvimento de um software; trata-se de um framework ou código pronto, e não de uma definição de alto nível de como um problema comum pode ser solucionado.
response: Errado
comment: Os padrões de projetos são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico em um contexto específico. Desse modo, de fato, os padrões de projeto são um conjunto de soluções generalistas para problemas recorrentes durante o desenvolvimento de um software. Entretanto, eles não são um framework, e – sim – eles são uma definição de alto nível de como um problema comum pode ser solucionado.
Other fields (not shown on cards):
back: Errado - Os padrões de projetos são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico em um contexto específico. Desse modo, de fato, os padrões de projeto são um conjunto de soluções generalistas para problemas recorrentes durante o desenvolvimento de um software. Entretanto, eles não são um framework, e – sim – eles são uma definição de alto nível de como um problema comum pode ser solucionado.

front: (CESPE / TJ-RJ - 2021) A coleção GoF (Gang of Four) é formada por padrões orientados a objetos, separados em categorias. A categoria padrões estruturais é responsável por:
a) estabelecer um design de objetos reutilizáveis.
b) fornecer maneiras eficientes para criar objetos.
c) descrever como os objetos são colocados juntos.
d) descrever como os objetos interagem.
e) distribuir responsabilidades entre os objetos.
response: Letra C
comment: Os padrões estruturais no GoF são responsáveis tratam das associações entre as classes e os objetos, ou seja, tratam do relacionamento entre eles. Em suma, busca descrever como os objetos são colocados juntos.
Other fields (not shown on cards):
back: Letra C - Os padrões estruturais no GoF são responsáveis tratam das associações entre as classes e os objetos, ou seja, tratam do relacionamento entre eles. Em suma, busca descrever como os objetos são colocados juntos.

front: (CESPE / TCE-PR – 2016) Um projeto fundamentado em padrões emprega um conjunto de soluções comprovadas de maneira conceitual para a construção da aplicação em conformidade com seu escopo.
response: Errado
comment: Na verdade, são soluções comprovadas de maneira factual/prática e, não, conceitual.
Other fields (not shown on cards):
back: Errado - Na verdade, são soluções comprovadas de maneira factual/prática e, não, conceitual.

front: (CESPE / TCU – 2015) Nos padrões de projeto (design patterns) estruturais, utilizam-se técnicas que valorizam um forte acoplamento entre as classes para favorecer o aprendizado e a portabilidade das aplicações.
response: Errado
comment: Opa... eles valorizam o fraco/baixo acoplamento.
Other fields (not shown on cards):
back: Errado - Opa... eles valorizam o fraco/baixo acoplamento.

front: (CESPE / INPI – 2013) O padrão bridge, além de converter a interface de uma classe existente em outra interface esperada pelos clientes, permite que algumas classes com interfaces diferentes funcionem conjuntamente.
response: Errado
comment: Adapter Esse padrão converte a interface de uma classe em outra interface que normalmente não poderiam trabalhar juntas por serem incompatíveis. Bridge Esse padrão desacopla uma interface de sua implementação, de forma que ambas possam variar independentemente. Converte a interface de uma classe existente em outra interface? Opa, isso é Adapter!
Other fields (not shown on cards):
back: Errado - Adapter Esse padrão converte a interface de uma classe em outra interface que normalmente não poderiam trabalhar juntas por serem incompatíveis. Bridge Esse padrão desacopla uma interface de sua implementação, de forma que ambas possam variar independentemente. Converte a interface de uma classe existente em outra interface? Opa, isso é Adapter!

front: (CESPE / INPI – 2013) Design patterns não se aplicam, exclusivamente, ao Java, podendo ser empregados em projetos que utilizam linguagem C#.
response: Correto
comment: Padrões de Projeto se aplicam a qualquer linguagem de programação e qualquer paradigma.
Other fields (not shown on cards):
back: Correto - Padrões de Projeto se aplicam a qualquer linguagem de programação e qualquer paradigma.

front: (CESPE / ANTT – 2013) Em programação orientada a objetos, o padrão de projeto denominado Iterator define uma forma de acesso sequencial aos elementos de um objeto agregado, sem expor sua representação interna.
response: Correto
comment: Iterator Esse padrão fornece uma maneira de acessar elementos de um objeto agregado sequencialmente sem expor sua representação interna. Acesso sequencial aos elementos de um objeto agregado? Opa, isso é Iterator!
Other fields (not shown on cards):
back: Correto - Iterator Esse padrão fornece uma maneira de acessar elementos de um objeto agregado sequencialmente sem expor sua representação interna. Acesso sequencial aos elementos de um objeto agregado? Opa, isso é Iterator!

front: (CESPE / ANTT – 2013) Em programação orientada a objetos, o padrão de projeto denominado Singleton define uma classe que possui apenas uma instância e provê um ponto de acesso local a ela.
response: Errado
comment: Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Classe que possui apenas uma instância? Opa, isso é Singleton! No entanto, ele diz que é um ponto de acesso local! Opa... não, é um ponto de acesso global!
Other fields (not shown on cards):
back: Errado - Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Classe que possui apenas uma instância? Opa, isso é Singleton! No entanto, ele diz que é um ponto de acesso local! Opa... não, é um ponto de acesso global!

front: (CESPE / TCE-RO – 2013) Uma das aplicabilidades do padrão Iterator é a representação de hierarquias do tipo todo-parte de objetos, de modo que a aplicação seja capaz de ignorar a diferença entre composições de objetos e objetos individuais, haja vista que todos os objetos tratados no padrão têm comportamento uniforme.
response: Errado
comment: Composite Esse padrão compõe objetos em estruturas de árvore para representar hierarquias parte-todo, permitindo aos clientes tratarem objetos individuais e composições de objetos uniformemente. Iterator Esse padrão fornece uma maneira de acessar elementos de um objeto agregado sequencialmente sem expor sua representação interna. Representação de hierarquias do tipo todo-parte? Comportamento uniforme? Opa, isso é Composite!
Other fields (not shown on cards):
back: Errado - Composite Esse padrão compõe objetos em estruturas de árvore para representar hierarquias parte-todo, permitindo aos clientes tratarem objetos individuais e composições de objetos uniformemente. Iterator Esse padrão fornece uma maneira de acessar elementos de um objeto agregado sequencialmente sem expor sua representação interna. Representação de hierarquias do tipo todo-parte? Comportamento uniforme? Opa, isso é Composite!

front: (CESPE / TCO-RO – 2013) O padrão Adapter será mais apropriado que o Façade quando for necessário fornecer uma interface unificada para um conjunto de interfaces em um subsistema.
response: Errado
comment: Facade Esse padrão oferece uma interface unificada para um conjunto de interfaces em um subsistema, definindo uma interface de alto nível que facilita a utilização do subsistema. Adapter Esse padrão converte a interface de uma classe em outra interface que normalmente não poderiam trabalhar juntas por serem incompatíveis. Interface unificada para um conjunto de interfaces em um subsistema? Opa, isso é Façade, logo ele é mais indicado!
Other fields (not shown on cards):
back: Errado - Facade Esse padrão oferece uma interface unificada para um conjunto de interfaces em um subsistema, definindo uma interface de alto nível que facilita a utilização do subsistema. Adapter Esse padrão converte a interface de uma classe em outra interface que normalmente não poderiam trabalhar juntas por serem incompatíveis. Interface unificada para um conjunto de interfaces em um subsistema? Opa, isso é Façade, logo ele é mais indicado!

front: (CESPE / TCE-RO – 2013) O uso do padrão Builder tem a vantagem de permitir acesso controlado à instância de uma classe, uma vez que ele encapsula a classe, criando um ponto global único de acesso.
response: Errado
comment: Builder Esse padrão separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes tipos de representações. Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Ponto global único de acesso? Opa, isso é Singleton!
Other fields (not shown on cards):
back: Errado - Builder Esse padrão separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes tipos de representações. Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Ponto global único de acesso? Opa, isso é Singleton!

front: (CESPE / TCE-RO – 2013) Os padrões estruturais, tais como o Bridge e o Proxy, abstraem o processo de instanciação, ajudando a tornar um sistema independente de como os seus objetos são criados. Já os padrões de criação, como Prototype e o Builder, se preocupam com a forma como as classes e os objetos são criados para formar estruturas compostas maiores.
response: Errado
comment: Os Padrões Criacionais abstraem o processo de criação de objetos a partir da instanciação de classes. Já os Padrões Estruturais tratam da forma como classes e objetos estão organizados para formar estruturas maiores. Por fim, Padrões Comportamentais se preocupam com os algoritmos e responsabilidades dos objetos, que ocorrem em tempo de execução. A questão inverteu os conceitos! Os padrões estruturais tratam da forma como as classes e objetos são organizados (a banca usou o termo “criados”, que não é o mais correto) para formar estruturas maiores e os padrões criacionais abstraem o processo de instanciação.
Other fields (not shown on cards):
back: Errado - Os Padrões Criacionais abstraem o processo de criação de objetos a partir da instanciação de classes. Já os Padrões Estruturais tratam da forma como classes e objetos estão organizados para formar estruturas maiores. Por fim, Padrões Comportamentais se preocupam com os algoritmos e responsabilidades dos objetos, que ocorrem em tempo de execução. A questão inverteu os conceitos! Os padrões estruturais tratam da forma como as classes e objetos são organizados (a banca usou o termo “criados”, que não é o mais correto) para formar estruturas maiores e os padrões criacionais abstraem o processo de instanciação.

front: (CESPE / MPOG – 2013) O padrão de comportamento e encadeamento de atendentes (chain of responsibility) evita acoplamento entre solicitantes e atendentes, permitindo que mais de um objeto tenha chance de tratar a solicitação.
response: Correto
comment: Chain of responsability Esse padrão evita o acoplamento do remetente de uma requisição ao seu receptor ao dar a mais de um objeto a chance de lidar com a requisição. Evita o acoplamento entre solicitantes e atendentes? É Chain of Responsability!
Other fields (not shown on cards):
back: Correto - Chain of responsability Esse padrão evita o acoplamento do remetente de uma requisição ao seu receptor ao dar a mais de um objeto a chance de lidar com a requisição. Evita o acoplamento entre solicitantes e atendentes? É Chain of Responsability!

front: (CESPE / MPOG – 2013) Para um problema recorrente no desenvolvimento de sistemas, normalmente, um padrão de projeto descreve uma solução geral, que não pode ser reutilizada.
response: Errado
comment: São soluções gerais para problemas recorrentes e, portanto, podem ser reutilizadas.
Other fields (not shown on cards):
back: Errado - São soluções gerais para problemas recorrentes e, portanto, podem ser reutilizadas.

front: (CESPE / MPOG – 2013) Padrões de projeto envolvem combinações de classes e algoritmos associados que cumprem com propósitos comuns de projeto.
response: Correto
comment: Perfeito! Eles resolvem problemas comuns ou recorrentes.
Other fields (not shown on cards):
back: Correto - Perfeito! Eles resolvem problemas comuns ou recorrentes.

front: (CESPE / MPE-PI – 2012) O padrão de projeto conhecido como façade é indicado para a definição de uma interface de nível mais alto que torne mais fácil a comunicação entre os subsistemas de um sistema complexo.
response: Correto
comment: Facade Esse padrão oferece uma interface unificada para um conjunto de interfaces em um subsistema, definindo uma interface de alto nível que facilita a utilização do subsistema. Definição de uma interface de nível mais alto que torne mais fácil a comunicação? Opa, isso é Façade.
Other fields (not shown on cards):
back: Correto - Facade Esse padrão oferece uma interface unificada para um conjunto de interfaces em um subsistema, definindo uma interface de alto nível que facilita a utilização do subsistema. Definição de uma interface de nível mais alto que torne mais fácil a comunicação? Opa, isso é Façade.

front: (CESPE / BASA – 2012) O padrão mediator define um objeto que encapsula como um conjunto de objetos interage. Esse padrão torna desnecessário que cada objeto armazene referências para todos os objetos com os quais interage e pode ser usado quando objetos se comunicam de forma definida, mas complexa.
response: Correto
comment: Mediator Esse padrão define um objeto que encapsula a forma como um conjunto de objetos interagem, promovendo um fraco acoplamento ao evitar que objetos se refiram aos outros explicitamente. Encapsula a forma como um conjunto de objetos interagem? Opa, isso é Mediator! O restante da descrição também está certo.
Other fields (not shown on cards):
back: Correto - Mediator Esse padrão define um objeto que encapsula a forma como um conjunto de objetos interagem, promovendo um fraco acoplamento ao evitar que objetos se refiram aos outros explicitamente. Encapsula a forma como um conjunto de objetos interagem? Opa, isso é Mediator! O restante da descrição também está certo.

front: (CESPE / BASA – 2012) O padrão adapter define uma família de algoritmos, permite o encapsulamento de algoritmos e possibilita a substituição desses algoritmos. Os algoritmos podem variar independentemente dos seus clientes. Esse padrão pode ser usado quando várias classes relacionadas diferirem apenas nos seus comportamentos.
response: Errado
comment: Strategy Esse padrão define uma família de algoritmos, encapsula cada um e faz deles intercambiáveis. Família de algoritmos? Opa, isso é Strategy!
Other fields (not shown on cards):
back: Errado - Strategy Esse padrão define uma família de algoritmos, encapsula cada um e faz deles intercambiáveis. Família de algoritmos? Opa, isso é Strategy!

front: (CESPE / MEC – 2011) O padrão Singleton garante que uma classe tenha somente uma instância, fornecendo, assim, um ponto global de acesso a essa instância.
response: Correto
comment: Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Perfeito! Ele realmente garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela.
Other fields (not shown on cards):
back: Correto - Singleton Esse padrão garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela. Perfeito! Ele realmente garante que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela.

front: (CESPE / MEC – 2011) O padrão Prototype pode ser usado no desenvolvimento de programas escritos com a linguagem PHP 5.0, atuando como padrão estrutural que permite construir tanto classes quanto objetos.
response: Errado
comment: Prototype é um padrão criacional e, não, estrutural.
Other fields (not shown on cards):
back: Errado - Prototype é um padrão criacional e, não, estrutural.

front: (CESPE / MEC – 2011) Os padrões de projeto são úteis tanto na fase de planejamento da arquitetura quanto na de desenvolvimento e codificação.
response: Correto
comment: Perfeito! Ele é útil na fase de planejamento (Padrão de Projeto), mas também é útil na fase de codificação.
Other fields (not shown on cards):
back: Correto - Perfeito! Ele é útil na fase de planejamento (Padrão de Projeto), mas também é útil na fase de codificação.

front: (CESPE / TRT-RN – 2010) Os padrões de projeto podem ser definidos como soluções já testadas para problemas que ocorrem frequentemente durante o projeto de software.
response: Correto
comment: Padrões de Projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam realizados.
Other fields (not shown on cards):
back: Correto - Padrões de Projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico em um contexto específico. Esses padrões nomeiam, abstraem e identificam aspectos comuns em uma estrutura e os torna úteis para que sejam realizados.

front: (CESPE / ANAC – 2009) O uso de padrões de projeto somente pode ser aplicado a projetos que implementam o paradigma de programação orientada a objetos.
response: Errado
comment: Não caiam nessa pegadinha! Padrões GOF somente podem ser aplicados a projetos orientados a objetos. No entanto, padrões de projeto (sem especificar quais) podem ser usados com qualquer paradigma.
Other fields (not shown on cards):
back: Errado - Não caiam nessa pegadinha! Padrões GOF somente podem ser aplicados a projetos orientados a objetos. No entanto, padrões de projeto (sem especificar quais) podem ser usados com qualquer paradigma.

front: (CESPE / SUFRAMA - 2013) O padrão de projeto Strategy contém um objeto strategy que é análogo ao objeto state do padrão de projeto State. Contudo, o primeiro objeto encapsula um algoritmo, enquanto o segundo encapsula informações sobre o estado de um objeto.
response: Correto
comment: Perfeito! O padrão Strategy é usado para encapsular um algoritmo em uma classe separada. Isso permite que o algoritmo seja substituído sem alterar as classes que o usam. O padrão State é usado para encapsular o estado de um objeto em uma classe separada. Isso permite que o estado seja substituído sem alterar as classes que o usam. O principal motivo pelo qual o padrão Strategy e o padrão State são análogos é porque ambos são usados para encapsular comportamentos e estados em classes separadas. No entanto, o padrão Strategy é usado para encapsular algoritmos, enquanto o padrão State é usado para encapsular estados.
Other fields (not shown on cards):
back: Correto - Perfeito! O padrão Strategy é usado para encapsular um algoritmo em uma classe separada. Isso permite que o algoritmo seja substituído sem alterar as classes que o usam. O padrão State é usado para encapsular o estado de um objeto em uma classe separada. Isso permite que o estado seja substituído sem alterar as classes que o usam. O principal motivo pelo qual o padrão Strategy e o padrão State são análogos é porque ambos são usados para encapsular comportamentos e estados em classes separadas. No entanto, o padrão Strategy é usado para encapsular algoritmos, enquanto o padrão State é usado para encapsular estados.