Sejam bem-vindos ao desafio: DESIGN PATTERNS JAVA.
O objetivo principal é colocar em prática umas das principais padrões de projetos do java: Singleton, Strategy/Repository e Facade através de um projeto Java.
Oi! Gostaria de compartilhar um pouco sobre minha experiência com o curso sobre padrões de projeto em Java e Spring Framework. Durante o curso, adquiri um profundo entendimento sobre a implementação e utilização desses padrões, além de aprender práticas valiosas que certamente aprimoraram minhas habilidades de desenvolvimento de software. Aqui está um resumo do que aprendi:
No curso, explorei diversos padrões de projeto em Java, suas implementações manuais e como utilizá-los eficazmente com o Spring Framework.
Aprendi que padrões de projeto são soluções consolidadas para problemas recorrentes de design de software. Eles fornecem uma estrutura reutilizável que melhora a qualidade, manutenção e extensibilidade do código.
Descobri a existência de três categorias principais de padrões de projeto:
- Padrões de Criação: Focados na criação de objetos.
- Padrões Estruturais: Tratam da composição de classes e objetos.
- Padrões Comportamentais: Lidam com a comunicação entre objetos.
Implementar esses padrões manualmente me deu uma compreensão mais profunda de suas funcionalidades subjacentes. Aqui estão alguns exemplos que implementei:
SINGLETON |
---|
Objetivo: Garantir que uma classe tenha apenas uma instância e fornecer um ponto de acesso global a ela. |
Singleton Preguiçoso:
public class SingletonPreguicoso {
private static SingletonPreguicoso instancia;
private SingletonPreguicoso() {}
public static synchronized SingletonPreguicoso getInstancia() {
if (instancia == null) {
instancia = new SingletonPreguicoso();
}
return instancia;
}
}
Singleton Apressado:
public class SingletonApressado {
private static final SingletonApressado instancia = new SingletonApressado();
private SingletonApressado() {}
public static SingletonApressado getInstancia() {
return instancia;
}
}
Singleton Lazy Holder:
public class SingletonLazyHolder {
private static class Holder {
private static final SingletonLazyHolder instancia = new SingletonLazyHolder();
}
private SingletonLazyHolder() {}
public static SingletonLazyHolder getInstancia() {
return Holder.instancia;
}
}
STRATEGY |
---|
Objetivo: Permitir a variação de algoritmos independentemente dos clientes que os utilizam. |
Exemplo: Robô com Estratégias de Movimentação:
Interface:
public interface Comportamento {
void mover();
}
Implementações:
public class ComportamentoNormal implements Comportamento {
@Override
public void mover() {
System.out.println("Movendo-se normalmente...");
}
}
public class ComportamentoDefensivo implements Comportamento {
@Override
public void mover() {
System.out.println("Movendo-se defensivamente...");
}
}
public class ComportamentoAgressivo implements Comportamento {
@Override
public void mover() {
System.out.println("Movendo-se agressivamente...");
}
}
Uso:
public class Robo {
private Comportamento comportamento;
public void setComportamento(Comportamento comportamento) {
this.comportamento = comportamento;
}
public void mover() {
comportamento.mover();
}
}
FACADE |
---|
Objetivo: Fornecer uma interface simplificada para um conjunto complexo de interfaces de um subsistema.. |
Exemplo de Facade:
public class Facade {
private CRMService crmService = new CRMService();
private CEPService cepService = new CEPService();
public void migrarCliente(String nome, String cep) {
String cidade = cepService.recuperarCidade(cep);
String estado = cepService.recuperarEstado(cep);
crmService.gravarCliente(nome, cidade, estado);
}
}
O curso destacou como o Spring Framework facilita a implementação desses padrões, fornecendo implementações prontas e ferramentas como IoC (Inversão de Controle) e DI (Injeção de Dependência).
- Compreensão Profunda: Ganhei uma sólida compreensão dos tipos mais comuns de padrões de projeto e como implementá-los manualmente.
- Uso do Spring: Aprendi a utilizar o Spring Framework para implementar esses padrões de maneira eficiente.
- Valor da Continuidade: Apreciei o valor da disseminação do conhecimento e do aprendizado contínuo no campo do desenvolvimento de software.
Utilizei o Spring Initializr para criar um projeto que explora os padrões de design com módulos específicos como Web, Data JPA, H2 Database, OpenFeign e Swagger.
- IoC e DI: O Spring gerencia a criação e dependências de objetos, promovendo uma separação de preocupações eficiente.
- Prototipação Rápida: O Spring Initializr facilita a criação rápida de projetos.
- Consumo de API Externa: OpenFeign permite a integração fácil com APIs externas.
- Documentação de API: Swagger fornece uma interface para documentar e testar APIs.
Minha jornada com este curso me permitiu entender profundamente os padrões de projeto em Java e como o Spring Framework pode otimizar o desenvolvimento de software, tornando o código mais robusto e flexível.
- Design Patterns com Java: Dos Clássicos (GoF) ao Spring Framework
Copyright © 2024 ClaudioMendonca.eng.br .