Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atualização pagina object pool #13

Merged
merged 1 commit into from
May 3, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 55 additions & 25 deletions posts/ObjectPool.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,51 +148,81 @@ O padrão Object Pool tem os seguintes benefícios e desvantagens:

## Implementação

Uma ideia de uso do padrão de projeto object pool, poderia ser em um jogo de damas, onde existe a opção de recuperar peças que já foram perdida. Cada jogador possui o seu cemitério, onde ficam suas peças que foram "mortas" pelo seu adversario, em certo ponto do jogo é possivel recuperar algumas peças que se encontram no cemitério;
Para que não seja necessário criar novas instâncias sempre que um jogador puder recuperar uma peça do cemitério, podemos utilizar o padrão de projeto e deixar uma pool de peças já prontas para serem usadas quando for preciso. Ao termino do jogo, ou quando forem "mortas" novamente, todas as peças serão devolvidas a pool.






## Exemplo de código

<!-- um jogo de damas onde o tabuleiro tem espaços especiais, e caso uma peça pare em cima desse espaço, receberá alguma instrução do que deve ser feito, uma dessas instruções é ganhar uma peça que está no monte (caso aja alguma disponivel), outra intrução é devolver uma peça para o monte caso tenha pego alguma -->
Abaixo podemos ver um exemplo de como ficariam as classes com a utilização do object pool:

```java
public class Peca {

private int idPeca;
private boolean disponivel;

public Peca(int idPeca) {

this.idPeca = idPeca;
this.disponivel = true;
}
}
```

public void setDisponibilidade(boolean disponibilidade) {
this.disponivel = disponibilidade;
}
```java
public class Cemiterio {

private ArrayList<Peca> disponiveisParaUso;
private ArrayList<Peca> pecasDeVoltaAoJogo;

public boolean getDisponibilidade() {
return this.disponivel;
public Peca pegarPeca() {
if (disponiveisParaUso.isEmpty()) {
return null;
}
else {
pecasDeVoltaAoJogo.add(disponiveisParaUsos.get(0));
disponiveisParaUso.remove(0);
return referencia_em_uso = pecasDeVoltaAoJogo.get(pecasDeVoltaAoJogo.size() - 1);
}
}
public void liberarPeca(Peca pecaDevolvida) {
pecasDeVoltaAoJogo.remove(0);
disponiveisParaUso.add(pecaDevolvida);
}
}
```

```java
public class Monte {

private List<Peca> pool_de_pecas;
## Exemplo de código

public Peca pegarPeca() {
// disponibiliza a peça para o cliente solicitado
}
Código generico de classes quando é utilizado o object pool.

public void liberarPeca() {
// o cliente devolve a peça, e ela volta para a lista
```java
public class Objeto {

private int idObjeto;
//qualquer outros atributos que o objeto possua
public Objeto(int idObjeto) {
this.idObjeto = idObjeto;
}
}
```

```java
public class PoolDeObjeto {

private ArrayList<Objeto> disponiveis;
private ArrayList<Objeto> emUso;

public Objeto pegarObjeto() {
if (disponiveis.isEmpty()) { // ver se a lista está vazia, caso esteja retorna null
return null;
}
else {
emUso.add(disponiveis.get(0));
disponiveis.remove(0);
return referencia_em_uso = emUso.get(emUso.size() - 1); // se a lista tem objetos disponiveis, retorna a referencia do objeto para o cliente
}
}
public void liberarObjeto(Objeto objetoDevolvido) {
emUso.remove(0);
disponiveis.add(objetoDevolvido); // o cliente devolve o objeto, e ele volta para a lista de disponiveis

}
}
```
## Usos conhecidos
Expand Down