0% acharam este documento útil (0 voto)
8 visualizações6 páginas

Design Patterns Editora Nova Babel

Enviado por

Caio Barbalho
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações6 páginas

Design Patterns Editora Nova Babel

Enviado por

Caio Barbalho
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 6

Design Patterns

Introdução
Analisando os requisitos e a estrutura do sistema da Editora Nova Babel, identificamos
que a implementação de Design Patterns pode otimizar o funcionamento da aplicação,
proporcionando maior eficiência, organização e flexibilidade.
Os Design Patterns trazem soluções testadas e aprovadas para problemas recorrentes
no desenvolvimento de software, permitindo a reutilização de código, facilitando a
manutenção e possibilitando a escalabilidade do sistema.
Para atender melhor às necessidades da editora, selecionamos três padrões que se
encaixam nos desafios apresentados: Factory, Adapter e Observer Patterns.
Factory
O Factory Pattern é um padrão de criação que utiliza uma interface ou classe abstrata
para instanciar objetos de subclasses específicas. Ele permite que a lógica de criação
de objetos seja centralizada, separando a criação do uso, o que traz flexibilidade e
facilita alterações no sistema.
Aplicação na Editora:
Na Editora Nova Babel, o Factory Pattern pode ser utilizado para gerenciar a criação de
diferentes tipos de relatórios ou objetos relacionados aos livros e às livrarias. Por
exemplo:
• Relatórios financeiros, de vendas ou de estoque.
• Objetos de empréstimos ou de vendas, que compartilham atributos básicos,
mas possuem comportamentos específicos.
Exemplo de Uso:

public interface Relatorio {


void gerar();
}

public class RelatorioFinanceiro implements Relatorio {


public void gerar() {
System.out.println("Gerando relatório financeiro...");
}
}

public class RelatorioEstoque implements Relatorio {


public void gerar() {
System.out.println("Gerando relatório de estoque...");
}
}

public class RelatorioFactory {


public static Relatorio criarRelatorio(String tipo) {
if (tipo.equals("Financeiro")) {
return new RelatorioFinanceiro();
} else if (tipo.equals("Estoque")) {
return new RelatorioEstoque();
}
throw new IllegalArgumentException("Tipo de relatório inválido");
}
}

Relatorio relatorio = RelatorioFactory.criarRelatorio("Financeiro");


relatorio.gerar();
Observer Pattern
O Observer Pattern é um padrão comportamental que define uma relação de
dependência 1-N entre objetos. Quando o estado de um objeto muda, todos os seus
observadores são automaticamente notificados.
Aplicação na Editora:
Na Editora Nova Babel, esse padrão pode ser aplicado ao sistema de empréstimos e
estoque. Por exemplo:
• Quando o estoque de um livro cai abaixo de um limite mínimo, os funcionários
responsáveis são notificados para providenciar reposição.
• Notificações automáticas podem ser enviadas às livrarias caso um empréstimo
esteja próximo do vencimento.
Exemplo de Uso:

public interface Observador {


void atualizar(String mensagem);
}

public class Funcionario implements Observador {


private String nome;

public Funcionario(String nome) {


this.nome = nome;
}

public void atualizar(String mensagem) {


System.out.println("Notificação para " + nome + ": " + mensagem);
}
}

public class Estoque {


private List<Observador> observadores = new ArrayList<>();
private int quantidade;

public void adicionarObservador(Observador obs) {


observadores.add(obs);
}

public void removerObservador(Observador obs) {


observadores.remove(obs);
}

public void alterarQuantidade(int novaQuantidade) {


this.quantidade = novaQuantidade;
if (quantidade < 10) {
notificarObservadores("Estoque abaixo do limite! Apenas " +
quantidade + " unidades restantes.");
}
}

private void notificarObservadores(String mensagem) {


for (Observador obs : observadores) {
obs.atualizar(mensagem);
}
}
}

// Exemplo de uso:
Funcionario funcionario1 = new Funcionario("João");
Funcionario funcionario2 = new Funcionario("Maria");

Estoque estoque = new Estoque();


estoque.adicionarObservador(funcionario1);
estoque.adicionarObservador(funcionario2);

estoque.alterarQuantidade(8);
Adapter Pattern
O Adapter Pattern é um padrão estrutural que permite que classes com interfaces
incompatíveis trabalhem juntas. Ele funciona como uma ponte entre duas interfaces,
convertendo a interface de uma classe em outra que o cliente espera.

Aplicação na Editora:
Na Editora Nova Babel, esse padrão pode ser utilizado para integrar diferentes
sistemas de livrarias ao sistema da editora. Por exemplo, se algumas livrarias utilizam
um sistema de pedidos que gera arquivos XML, enquanto outras usam JSON, o Adapter
pode ser usado para padronizar esses formatos e torná-los compatíveis com o sistema
da editora.
Isso facilita a integração de livrarias parceiras, sem necessidade de alterar os sistemas
originais delas, aumentando a interoperabilidade.
Exemplo de Uso:

public interface Pedido {


void processarPedido();
}

public class PedidoJson {


public void carregarJson(String json) {
System.out.println("Carregando pedido em JSON: " + json);
}
}

public class PedidoJsonAdapter implements Pedido {


private PedidoJson pedidoJson;

public PedidoJsonAdapter(PedidoJson pedidoJson) {


this.pedidoJson = pedidoJson;
}

@Override
public void processarPedido() {
String json = "{pedido: 'Livro XYZ', quantidade: 10}";
pedidoJson.carregarJson(json);
}
}

public class PedidoXml {


public void carregarXml(String xml) {
System.out.println("Carregando pedido em XML: " + xml);
}
}

public class PedidoXmlAdapter implements Pedido {


private PedidoXml pedidoXml;

public PedidoXmlAdapter(PedidoXml pedidoXml) {


this.pedidoXml = pedidoXml;
}

@Override
public void processarPedido() {
String xml = "<pedido><item>Livro
XYZ</item><quantidade>10</quantidade></pedido>";
pedidoXml.carregarXml(xml);
}
}

public class Main {


public static void main(String[] args) {
Pedido pedidoJson = new PedidoJsonAdapter(new PedidoJson());
Pedido pedidoXml = new PedidoXmlAdapter(new PedidoXml());

System.out.println("Processando pedidos...");
pedidoJson.processarPedido();
pedidoXml.processarPedido();
}
}

Você também pode gostar