Pool ou Factory?!

Olá,
implementei uma classe abstrata a qual contem um metodo static chamado createObject que retorna um objeto tal. Esse metodo funciona assim:
:arrow: Verifica se o objeto requerido já foi criado. Se sim, pega esse objeto de um map e retorna. Senão, cria o objeto, coloca no map e retorna. Isso é um pool ou uma factory?!

Até.

Factory!

Ou talvez um Pooled Factory… hehehehehe :smiley:

um pool eh um factory se voce implementou com factories methods. e uma factory pode vir a ser um pool, justo por isso voce encapsulou a construcao dos objetos!

outra coisa, isso da nomeclatura, voce nao deve se importar tanto. explicando que eh um pool, o pessoal vai entender.

Um Pool é alguém que tem um número finito de instâncias simultâneas, e toma uma atitude quando há mais gente querendo uma instância daquele objeto do que instâncias disponíveis: ou ele dá pau, ou ele coloca o requerente em espera, essas coisas…

A gente usa Singleton quando a gente quer a MESMA instância todas as vezes. Como vc usa um Map, e retorna a mesma instância, me parece mais o caso.

Um Connection Pool do JDBC, que é o caso mais comum, é um carinha que tem X instâncias de java.sql.Connection numa fila. Quando alguém empresa uma collection, ele remove. Se ele tiver vazio, alguma coisa especial tem que ser feita. Com o pool do Jakarta, vc pode configurar, se a thread que pediu espera até alguém devolver uma conexão, ou se ela espera um tempo, depois falha, ou se ela falha na hora, ou se o pool cria uma conexao nova só pra atender esse carinha a mais.

Usa-se um Pool quando uma instanciação daquele objeto é cara, e vc quer portanto reaproveitar instâncias, mas não dá pra viver com um Singleton.

[]s!!

Acho q minha situação é parecida com a do cancao. Tenho uma classe Usuario que tem um método getInstance(String uid). Mas essa classe não é um singleton. Esse método verifica se existe uma instancia com essa chave num hashtable, se tiver retorna ela, senão cria, coloca no hash e retorna.

Refaço a pergunta do cancao: isso é uma factory?

Eu acho que como o danieldestro disse, isso funciona como uma Pooled Factory. Bom, no meu caso e aparentemente tambem no seu, não há um numero limitado de instancias como num pool de conexões, por exemplo. Pode ser um numero variavel de instancias mas, como é caro cria-las, o preferivel e manter as que já há em cache e usar quando necessario.

Em tempo, um pool deve ter, na maioria dos casos, esquemas para tratar acessos concorrentes e garantir que a mesma instancia não será usada em dois cantos ao mesmo tempo. No meu caso e provavelmente no seu, as coisas são diferentes. Voto pelo esquema de Pooled Factory. :wink:

Até.

Acabei de inventar um novo Pattern.

Vou pedir pra adicionar nos do GoF.