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?!
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.
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.
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.