Design Patterns - DAO e Value Object

Pessoal,

Alguém tem algum material tipo how to ou hello world que ensine como se utiliza os padrões DAO e Value Object?

Bem tenho quase certeza q no site da sun, na parte de blue prints, tem algo sobre VO e DAO

segue link.
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html

Mas tambem nao tem muito segredo. A grosso modo, um uso comum pra DAO eh fornecer um conjutno de interfaces, que as classes especializadas devem implementar, e VO simplesmente te retorna todo o resultado em uma Collection, por exemplo, ao inves de precisar ficar iterando cada item de um ResultSet.
Logico que ha varias implementacoes possiveis, mas essa eh uma bem simples e funcional.

Por exemplo, digamos que voce queira que o acesso aos dados do teu sistema possa ser feito usando qualquer tipo de fonte ( seja ela arquivos textos, RMI ou algum banco de dados qualquer ). Usando uma simples classe “Pessoa” como exemplo, com acoes de inserir, editar, deletar e selecionar todos os registros, a interface para DAO poderia ficar assim:

// Implementacao basica da interface
interface PessoaDAO
{
	public int addNew(Pessoa p);
	public void update(Pessoa p);
	public void delete(int pessoaId);
	public ArrayList selectAll();
}

// Agora, cada fonte de dados diferente
// implementa PessoaDAO, manipulando internamente
// os dados da maneira que achar melhor
// No exemplo abaixo, temos implementacao tanto
// para um banco de dados X
public class PessoaDB implements PessoaDAO
{
	public int addNew(Pessoa p)
	{
		// Cria PreparedStatements,
		// seta os dados pegando os
		// valores de 'p' e executa 
		// a query

		return idGeradoPelaInsercao;
	}

	public void update(Pessoa p)
	{
		// mesmo esquema do addNew...
		// pega os sqls e executa
	}

	public void delete(int pessoaId)
	{
		// mais acoes no banco de dados
	}

	// Este metodo, em termos, ja daria
	// para chamar de um Value Object
	public ArrayList selectAll()
	{
		// Aqui executa um 
		// SELECT * FROM pessoa,
		ArrayList pessoasList = new ArrayList();

		// ...
		while (rs.next()) {
			Pessoa p = new Pessoa();

			p.setNome(rs.getString("nome"));
			// ...
			pessoasList.add(p);
		}

		// Retorna a colecao de "Pessoa"s
		return pessoasList;
	}
}

Note que eh soh uma exemplificacao, geralmente os VO sao manipulados em um nivel mais algo, amplo, mas a ideia basica eh essa.
Ainda com DAO, pelo menos para o exemplo acima, eh muito comum voce ter um “Factory” ou um “Absctract Factory”, que se encarregara de retornar o tipo de DAO especifico ( por exemplo, um PessoaDB ou um PessoaTXT ).
Eh meio raro voce usar um pattern sozinho, quase sempre estara usando varios em conjunto.

Rafael