-
São soluções consolidadas para problemas recorrentes no desenvolvimento e manutenção de software orientado a objetos.
-
O livro Design Patterns: Elements of Reusable Object-Oriented Software (1995) é a principal referência sobre o tema, a qual tornou os autores Gamma, Helm, Johnson e Vlissides conhecidos como “Gang of Four” (GoF).
-
São comumente classificados nas seguintes categorias:
- Padrões Criacionais: Abstract Factory, Builder, Factory Method, Prototype, Singleton.
- Padrões Comportamentais: Chain of Responsibility, Iterator, Observer, Strategy, Template Method.
- Padrões Estruturais: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
- Permitir a criação de uma única instância de uma classe e fornecer um modo para recuperá-la.
- Simplificar a variação de algoritmos para a resolução de um mesmo problema.
- Prover uma interface que reduza a complexidade nas integrações com subsistemas.
-
Singleton: @Bean e @Autowired.
-
Strategy: @Service e @Repository.
-
Facade: construção de uma API REST. Integrações: Spring Data JPA e ViaCEP API(Feig).
-
Criar um projeto no spring initializr com as seguintes dependências: Spring Web, Spring Data JPA, PostgresSQL Driver, Lombok e o OpenFeign.
-
Adicionar documentação com Swagger manualmente no pom:
<!-- Documentação no Swagger -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
// Configurações no arquivo application.properties
## Endpoint JSON documentação do Swagger
springdoc.api-docs.path=/api-docs
## Para acessar o Swagger UI(página html): http://localhost:8080/swagger-ui/index.html
-
OpenFeign: cliente REST declarativo, onde você consegue criar um client HTTP para consumir Api externas de uma maneira mais simples.
-
Para habilitar o OpenFeign adicione a notação @EnableFeignClients na classe que contenha o seu método main:
@EnableFeignClients <--------------------
@SpringBootApplication
public class DesignPattersSpringApplication {
public static void main(String[] args) {
SpringApplication.run(DesignPattersSpringApplication.class, args);
}
}
- Para consumir uma Api usando o OpenFeign crie uma interface e configure da seguinte forma:
@FeignClient(name = "viacep", url = "https://viacep.com.br/ws") <------------------------------
public interface ViaCepService {
@RequestMapping(method = RequestMethod.GET, value = "/{cep}/json/") <---------------------
Endereco consultarCep(@PathVariable("cep") String cep);
}