Para exercitar a utilização do padrão de projeto Flyweight, desenvolva um cache de Unidades da Federação (UF).
A interface Localidade (Flyweight) declara uma interface da qual as localidades podem receber e atuar sobre seus atributos.
A classe Unidade da Federação (ConcreteFlyweight) implementa a interface Localidade e armazena o estado de uma Unidade da Federação.
A classe Cache (FlyweightFactory) deve criar e gerenciar as Unidades da Federação, garantindo que as Localidades sejam compartilhadas apropriadamente.
A classe Cliente (Client) mantém uma referência para o Cache e solicita ao mesmo as instâncias das Unidades da Federação desejados.
/**
* Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
*
* Permission is granted to copy, distribute and/or modify this document
* under the terms of the GNU Free Documentation License, Version 1.3
* or any later version published by the Free Software Foundation; with
* no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
* A copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* Flyweight
*/
public interface Localidade
{
/**
* Retornar o codigo da localidade
*
* @return codigo da localidade
*/
public String getCodigo();
/**
* Retornar o nome da localidade
*
* @return nome da localidade
*/
public String getNome();
}
/**
* Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
*
* Permission is granted to copy, distribute and/or modify this document
* under the terms of the GNU Free Documentation License, Version 1.3
* or any later version published by the Free Software Foundation; with
* no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
* A copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* ConcreteFlyweight
*/
public class UnidadeFederacao implements Localidade
{
/**
* Codigo da unidade da federacao
*/
private String codigo;
/**
* Nome da unidade da federacao
*/
private String nome;
/**
* Construtor para inicializar a unidade da federacao
*
* @param codigo codigo da unidade da federacao
* @param nome nome da unidade da federacao
*/
public UnidadeFederacao(String codigo, String nome)
{
this.codigo = codigo;
this.nome = nome;
}
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.Localidade#getCodigo()
*/
public String getCodigo()
{
return this.codigo;
}
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.Localidade#getNome()
*/
public String getNome()
{
return this.nome;
}
}
/**
* Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
*
* Permission is granted to copy, distribute and/or modify this document
* under the terms of the GNU Free Documentation License, Version 1.3
* or any later version published by the Free Software Foundation; with
* no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
* A copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
import java.util.HashMap;
import java.util.Map;
/**
* FlyweightFactory
*/
public class Cache
{
/**
* Localidades armazenadas no cache
*/
private Map<String, Localidade> cache;
/**
* Construtor padrao
*/
public Cache()
{
this.cache = new HashMap<String, Localidade>();
}
/**
* Criar a instancia da localidade
*
* @param codigo codigo da localidade
* @return instancia da localidade
* @throws IllegalArgumentException codigo da localidade invalido
*/
private Localidade createLocalidade(String codigo) throws IllegalArgumentException
{
if("AC".equals(codigo))
{
return new UnidadeFederacao("AC", "Acre");
}
if("AL".equals(codigo))
{
return new UnidadeFederacao("AL", "Alagoas");
}
if("AP".equals(codigo))
{
return new UnidadeFederacao("AP", "Amapá");
}
if("AM".equals(codigo))
{
return new UnidadeFederacao("AM", "Amazonas");
}
if("BA".equals(codigo))
{
return new UnidadeFederacao("BA", "Bahia");
}
if("CE".equals(codigo))
{
return new UnidadeFederacao("CE", "Ceará");
}
if("DF".equals(codigo))
{
return new UnidadeFederacao("DF", "Distrito Federal");
}
if("ES".equals(codigo))
{
return new UnidadeFederacao("ES", "Espírito Santo");
}
if("GO".equals(codigo))
{
return new UnidadeFederacao("GO", "Goiás");
}
if("MA".equals(codigo))
{
return new UnidadeFederacao("MA", "Maranhão");
}
if("MT".equals(codigo))
{
return new UnidadeFederacao("MT", "Mato Grosso");
}
if("MS".equals(codigo))
{
return new UnidadeFederacao("MS", "Mato Grosso do Sul");
}
if("MG".equals(codigo))
{
return new UnidadeFederacao("MG", "Minas Gerais");
}
if("PA".equals(codigo))
{
return new UnidadeFederacao("PA", "Pará");
}
if("PB".equals(codigo))
{
return new UnidadeFederacao("PB", "Paraíba");
}
if("PR".equals(codigo))
{
return new UnidadeFederacao("PR", "Paraná");
}
if("PE".equals(codigo))
{
return new UnidadeFederacao("PE", "Pernambuco");
}
if("PI".equals(codigo))
{
return new UnidadeFederacao("PI", "Piauí");
}
if("RJ".equals(codigo))
{
return new UnidadeFederacao("RJ", "Rio de Janeiro");
}
if("RN".equals(codigo))
{
return new UnidadeFederacao("RN", "Rio Grande do Norte");
}
if("RS".equals(codigo))
{
return new UnidadeFederacao("RS", "Rio Grande do Sul");
}
if("RO".equals(codigo))
{
return new UnidadeFederacao("RO", "Rondônia");
}
if("RR".equals(codigo))
{
return new UnidadeFederacao("RR", "Roraima");
}
if("SC".equals(codigo))
{
return new UnidadeFederacao("SC", "Santa Catarina");
}
if("SP".equals(codigo))
{
return new UnidadeFederacao("SP", "São Paulo");
}
if("SE".equals(codigo))
{
return new UnidadeFederacao("SE", "Sergipe");
}
if("TO".equals(codigo))
{
return new UnidadeFederacao("TO", "Tocantins");
}
throw new IllegalArgumentException(codigo);
}
/**
* Retornar a instancia da localidade
*
* @param codigo codigo da localidade
* @return instancia da localidade
*/
public Localidade getLocalidade(String codigo)
{
if(!this.cache.containsKey(codigo))
{
this.cache.put(codigo, createLocalidade(codigo));
}
return this.cache.get(codigo);
}
}
/**
* Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
*
* Permission is granted to copy, distribute and/or modify this document
* under the terms of the GNU Free Documentation License, Version 1.3
* or any later version published by the Free Software Foundation; with
* no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
* A copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* Client
*/
public class Cliente
{
/**
* Metodo principal da linguagem de programacao Java
*
* @param args argumentos da linha de comando (nao utilizado)
*/
public static void main(String[] args)
{
Cache cache = new Cache();
// com.ybadoo.tutoriais.poo.UnidadeFederacao@746ac18c
System.out.println(cache.getLocalidade("DF"));
// com.ybadoo.tutoriais.poo.UnidadeFederacao@49b3d1e5
System.out.println(cache.getLocalidade("SC"));
// com.ybadoo.tutoriais.poo.UnidadeFederacao@746ac18c
System.out.println(cache.getLocalidade("DF"));
// com.ybadoo.tutoriais.poo.UnidadeFederacao@49b3d1e5
System.out.println(cache.getLocalidade("SC"));
}
}