Flyweight Pattern

Das Flyweight Pattern (siehe Design Pattern) löst das Effizienzproblem, das durch die Verwendung vieler, leichtgewichtiger Objekte entsteht. Bedingung dafür ist, dass die Objekte keinen sich mit der Zeit ändernden Zustand haben (also immutable sind). Der Ansatz besteht darin, gleichartige Objekte mehrfach zu nutzen. Das wird durch eine Factory erreicht, die bereits erzeugte Flyweights speichert und bei einer Anfrage nach einem neuen Objekt wenn möglich ein gleichartiges, früher erzeugtes und gespeichertes Objekt erneut liefert.

Ein Beispiel für das Flyweight Pattern findet sich im Lisp-Package. Die statische Methode Symbol.createSymbol(String name) ist die Factory für Symbole. Die Methode prüft zuerst, ob ein Symbol gleichen Namens bereits erzeugt wurde und liefert im Erfolgsfall dieses früher erzeugte Symbol. Anderenfalls wird ein neues Symbol erzeugt und im StringDictionary unter seinem Namen abgelegt.

public final class Symbol ...
{
  private static final HashMap<String, Symbol> symbols = new HashMap<String, Symbol>();
  //
  private final String name;
  ...
  //
  private Symbol(String name)
  {
    super();
    //
    this.name = name;
    ...
  }
  //
  ...
  //
  public static synchronized Symbol createSymbol(final String name)
  {
    Symbol symbol = symbols.get(name);
    //
    if (symbol != null) return symbol;
    //
    symbol = new Symbol(name);
    symbols.put(name, symbol);
    //
    return symbol;
  }
}