Skip to content

jonasaacampos/desing-patterns-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Explorando Padrões de Projetos na Prática com Java

Java


Para iniciar este projeto, foi utilizado o spring initializr utilizando as opções:

  • Project: Maven Project;
  • Language: Java 11;
  • Spring Boot: 2.6.0;
  • Dependencies: Spring Web, Spring Data JPA, H2 Database e OpenFeign.

Dependência adicionada manualmente no pom.xml: Springdoc OpenAPI UI v1.5.12.

Diagrama do código (UML Diagram)


Padrões de projeto analisados

  • Singleton
  • Strategy
  • Facade

Singleton

Torne a classe do objeto de instância única responsável pela criação, inicialização, acesso e aplicação. Declare a instância como um membro de dados estáticos privados. Forneça uma função de membro estático público que encapsula todo o código de inicialização e fornece acesso à instância.

O cliente chama a função de acesso (usando o nome da classe e o operador de resolução de escopo) sempre que uma referência à instância única for necessária.

Exemplo

O padrão Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Ele é nomeado após o conjunto singleton, que é definido como um conjunto contendo um elemento. O escritório do presidente dos Estados Unidos é um Singleton. A Constituição dos Estados Unidos especifica os meios pelos quais um presidente é eleito, limita o mandato e define a ordem de sucessão. Como resultado, pode haver no máximo um presidente ativo por vez. Independentemente da identidade pessoal do presidente ativo, o título "O Presidente dos Estados Unidos" é um ponto de acesso global que identifica a pessoa no cargo.

Font: Singleton Design Pattern

Strategy

Padrão Comportamental com objetivo de simplificar a variação de algoritmos para a resolução de um mesmo problema

A entidade Interface pode representar uma classe base abstrata ou as expectativas de assinatura do método pelo cliente. No primeiro caso, a hierarquia de herança representa polimorfismo dinâmico. No último caso, a entidade Interface representa o código do modelo no cliente e a hierarquia de herança representa o polimorfismo estático.

Exemplo

Uma Estratégia define um conjunto de algoritmos que podem ser usados ​​alternadamente. Meios de transporte para um aeroporto é um exemplo de Estratégia. Existem várias opções, como dirigir o próprio carro, pegar um táxi, um ônibus para o aeroporto, um ônibus urbano ou um serviço de limusine. Para alguns aeroportos, metrôs e helicópteros também estão disponíveis como meio de transporte para o aeroporto. Qualquer um desses meios de transporte levará o viajante ao aeroporto e pode ser usado de forma intercambiável. O viajante deve escolher a Estratégia com base em trade-offs entre custo, conveniência e tempo.

Fonte: Strategy Design Pattern

Facade ("Fachada")

Padrão Estrutural que visa prover uma interface que reduza a complexidade nas integrações com subsistemas.

Facade discute o encapsulamento de um subsistema complexo em um único objeto de interface. Isso reduz a curva de aprendizado necessária para alavancar com êxito o subsistema. Também promove a dissociação do subsistema de seus potencialmente muitos clientes. Por outro lado, se a Fachada for o único ponto de acesso para o subsistema, isso limitará os recursos e a flexibilidade de que os "usuários avançados" podem precisar.

O objeto Fachada deve ser um defensor ou facilitador bastante simples. Não deve se tornar um oráculo onisciente ou objeto "deus".

Exemplo

A Fachada define uma interface unificada de nível superior para um subsistema que facilita o uso. Os consumidores encontram uma fachada ao fazer pedidos de um catálogo. O consumidor liga para um número e fala com um representante de atendimento ao cliente. O representante de atendimento ao cliente atua como uma fachada, fornecendo uma interface para o departamento de atendimento de pedidos, o departamento de cobrança e o departamento de expedição.

Fonte: Facade Design Pattern - SourceMaking

A relação entre Padrões de Projetos com Java e o spring framework pode-se ser percebida em:

  • Annotations @Bean e @Autowired como padrão criacional Singleton;
  • Annotations @Service e @Repository como padrão comportamental Strategy;
  • Annotation @RestController como padrão estrutural Facade.

Swagger: http://127.0.0.1:8080/swagger-ui.html

Minimun Payload in POST:

{
  "name": "string",
  "ean": "string",
  "unity": "string",
  "distributors": [
    {
      "name": "string",
      "comments": "string",
      "address": {
        "cep": "stringCepWith8Numbers"
      },
	  "addressNumber": 1
    }
  ]
}

Example:

{
  "name": "Caneta Esferográfica",
  "ean": "0058771387587",
  "unity": "Peça",
  "distributors": [
    {
      "name": "BIC",
      "comments": "Fabricante de canetas",
      "address": {
        "cep": "06447130"
      },
      "addressNumber": 800
    }
  ]
}

Licença de utilização

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Contato

Author: Jonas Araujo de Avila Campos

Confira mais projetos: AQUI

About

Explorando Padrões de Projetos na Prática com Java

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages