Design Pattern #10.1

Autor: NathalieOhneHerz GitHub

Das Object Pool Pattern mit AutoCloseable

Wir gehen schwimmen in einem Pool - und schließen uns?!

Hauptartikel: [Design Pattern #1] Was sind die Design patterns


Was ist das Object Pool Pattern mit Autocloseable?

Hierbei handelt es sich um eine Erweiterung des Object Pool Patterns. Es soll ermöglich werden, auch mit Java "Try-Catch with Resources" und dem Pool zu arbeiten. Dabei soll ein AutoCloseable es übernehmen, das Objekt an den Pool zurück zu geben um es nicht zu blockieren.


Modellierung


Implementierung in Java

package de.nathalieoneill.devtek.pool.v1; import java.util.HashMap; import java.util.Map; /** * @author Nathalie */ public abstract class Pool<T> { private final Map<T, Boolean> pooledObjects; public Pool() { this.pooledObjects = new HashMap<>(); } public abstract T create(); public T checkOut() { T instance; if (pooledObjects.size() == 0) { instance = this.create(); } else { instance = this.pooledObjects.entrySet().stream().filter( entry -> !entry.getValue() ).map(Map.Entry::getKey).findFirst().orElse(null); } if (instance == null) instance = this.create(); this.pooledObjects.put(instance, true); return instance; } public void checkIn(T instance) { this.pooledObjects.put(instance, false); } }
package de.nathalieoneill.devtek.pool.v1; /** * @author Nathalie */ public class Connection implements AutoCloseable { private final Pool pool; private final String host; private final int port; public Connection(Pool pool, String host, int port) { this.pool = pool; this.host = host; this.port = port; } public void fetchData() { System.out.println("Fetching From " + host + ":" + port); } @Override public void close() throws Exception { this.pool.checkIn(this); } }
package de.nathalieoneill.devtek.pool.v1; /** * @author Nathalie */ public class ConnectionPool extends Pool<Connection> { private final String host; private final int port; public ConnectionPool(String host, int port) { this.host = host; this.port = port; } @Override public Connection create() { return new Connection(this, host, port); } }

Die Verwendung sähe dann so aus:

package de.nathalieoneill.devtek.pool.v1; /** * @author Nathalie */ public class DevTek { public static void main(String[] args) { final ConnectionPool connectionPool = new ConnectionPool("localhost", 1337); try(Connection connection = connectionPool.checkOut()) { connection.fetchData(); } catch (Exception e) { e.printStackTrace(); } } }

Ich hoffe dass ich euch das Object Pool Pattern mit AutoCloseable näher bringen konnte.

Mit freundlichen Grüßen
Nathalie