Bean que podem ter varios estados / atributos que não são importantes

Algumas vezes no decorrer que eu desenvolvi softwares, cedo ou tarde, acaba ocorrendo este tipo de caso, e resolvemos da mais diversa maneira, gostaria de saber se há um design pattern para isso, ou até mesmo uma forma elegante para resolver este tipo de problema.

Supondo que eu tenha esta classe:

public class Produto {
	
	private Integer id;
	
	private String descricao;
	
	private Double preco;
	
	// Getters & Seters.
}

Vez ou outra, eu preciso por exemplo mostrar o preço formatado no padrão brasileiro R$10.00, outra vez no americano US$10.00 (sem levar em consideração o locale da maquina). Para esses casos criamos metodos no bean com o devido nome, ex:

	public String getPrecoBrasileiro() {
		//...
	}
	
	public String getPrecoAmericano() {
		//...
	}

agora a dúvida é, certa vez, entre uma camada ou outra (ou não), ou até mesmo num metodo X, eu preciso ter por exemplo um atributo adicional no meu bean, por exemplo um Flag para saber se eu devo ou não tomar uma ação especial para aquele objeto… Eu não queria cada vez que ter uma condição para aquele objeto, ir e sujar meu bean com variaveis não @Transient (já pensando em JPA).

Eu dei uma lida por cima do pattern Proxy, até entendi o uso dele, e gostaria de saber se não aplicaria também ao meu problema (apesar que, sem usar interfaces, acho que não daria pra ser mais proxy), exemplo:

public class ProdutoProxy {
	
	private Produto produto;
	
	private boolean inserirProduto;
	
	public ProdutoProxy(Produto produto) {
		this.produto = produto;
	}
	
	public Produto getProduto() {
		return this.produto;
	}
	
	public void setInserirProduto(boolean inserirProduto) {
		this.inserirProduto = inserirProduto;
	}
	
	public boolean isInserirProduto() {
		return this.inserirProduto;
	}
}

sendo: produtoProxy.getProduto();

ou

public class ProdutoProxy extends Produto {
		
	private boolean inserirProduto;
	
	public void setInserirProduto(boolean inserirProduto) {
		this.inserirProduto = inserirProduto;
	}
	
	public boolean isInserirProduto() {
		return this.inserirProduto;
	}
}

sendo: ProdutoDAO.inserir((Produto) produtoProxy);

Alguem tem alguma outra sugestão ? :slight_smile:

Primeiro caso: pattern Decorator.

Segundo caso: ou Decorator ou Strategy.

[]´s

Exemplificando (não vou seguir o Decorator à risca aqui porque estou com preguiça =P ):

[code]public class Produto {

private Integer id;   
   
private String descricao;   
   
private Double preco;   
   
// Getters & Seters.   

}

public class ProdutoBrasileiro extends Produto {
private Produto produto;

ProdutoBrasileiro (Produto produto) {
this.produto = produto;
}

public Double getPreco() {
//retorna o preço formatado em reais
}

}

[/code]

Já no segundo caso, seria legal se você mostrasse direitinho a necessidade , OK?

[]´s

valew pelas sugestões asaudate,

[quote=asaudate]Exemplificando (não vou seguir o Decorator à risca aqui porque estou com preguiça =P ):

[code]public class Produto {

private Integer id;   
   
private String descricao;   
   
private Double preco;   
   
// Getters & Seters.   

}

public class ProdutoBrasileiro extends Produto {
private Produto produto;

ProdutoBrasileiro (Produto produto) {
this.produto = produto;
}

public Double getPreco() {
//retorna o preço formatado em reais
}

}

[/code]

Já no segundo caso, seria legal se você mostrasse direitinho a necessidade , OK?

[]´s

[/quote]

Eu não preciso “decorar” meus objetos, até porquê eu iria ter que fazer uma interface e só iria talvez complicar mais algo que era para ser simples, e strategy também não se enxcaixa no meu problema. Na pressa, acabei fazendo pela segunda opção para não ter que duplicar meu código, funcionou muito bem, apesar que, pra mim, é quase pog pura :smiley:

Sobre a necessidade real: