[JAVA] Fliegengewichtsmuster

Flyweight Pattern Wiederverwendung ohne mehrere Instanzen, um speicherfreundlich zu sein

Diese Seite beschreibt Folgendes ・ Grundkonfiguration des Fliegengewichts ·Implementierung

Design Pattarm MENU

Grundkonfiguration des Fliegengewichts

Klasse Erläuterung
factory.class sam.Duplizieren Sie keine Klasseninstanzen
sam.class Zielklasse, für die der Benutzer eine Instanz erstellt
user(Main.class) factory.Sam über Klasse.Erstellen Sie eine Klasseninstanz

Grundstruktur von factory.class und sam.class

factory.class


class factory{
  Map map;
  sam getSam(){}
}

Im Werk wird die generierte sam () -Instanz in Map gespeichert Verwalten, um Doppelarbeit zu vermeiden

sam.class


class sam{
  String s;
  sam(){}
}

sam () registriert String s im Konstruktor

Implementieren Sie die folgende Grundstruktur

factory.class


class factory{
  Map map = new HashMap();        // sam()Speichern Sie die Instanz
  sam getSam(String key){         
      sam s = (sam) map.get(key); //Holen Sie sich eine Instanz von der Karte
      if(s != null){return s;}    //Wenn sich eine Instanz in der Karte befindet, übergeben Sie sie an den Benutzer
      sam sm= new sam(key);       //Wenn die Karte keine Instanz enthält, erstellen Sie eine Instanz
      map.put(key,sm);            //Registrieren Sie eine neue Instanz in der Karte, nachdem Sie sie erstellt haben
      return sm;                  //Veröffentlichen Sie eine Instanz für den Benutzer
  }
}

sam.class


class sam{
  String s;
  sam(String s){}
}

Implementierung

Es liegt ein Problem mit dem obigen Code vor. Die Factory verfügt über eine Map und verwaltet die sam () -Instanz. Wenn die Fabrik selbst zu mehreren Schnittstellen gemacht wird, werden durch diese Nummer unterschiedliche Karten erstellt.

Dann können Sie sam () -Instanzen nicht richtig verwalten Setzen wir also factory.class auf singleton (Es kann die Vervielfältigung von Map selbst nicht verhindern, aber vorerst als Prozess)

Implementieren Sie auch eine print () -Methode, die den Karteninhalt zur weiteren Überprüfung druckt

factory.class


class factory{Map map = new HashMap();
  private static final factory fac = new factory();

  private factory(){}
  static  factory getInstance(){
          return fac;
  }

  sam getSam(String key){
      sam s = (sam) map.get(key);
      if( s != null){return s;}
      sam sm = new sam(key);
      map.put(key,sm);
      return sm;
  }

  void print(){
    Iterator it = map.keySet().iterator();
    while(it.hasNext()){
      sam s = (sam) map.get(it.next());
      System.out.println(s+":"+s.get());
    }
  }
}

sam.class


class sam{
  private String s;
  sam(String s){this.s=s;}
  String get(){return this.s;}
}

user(Main.class)


public static void main(String[] args){
  factory f = factory.getInstance();
  f.getSam("a");
  f.getSam("b");
  f.getSam("c");
  f.getSam("a");
  f.print();
}}

Recommended Posts

Fliegengewichtsmuster
Entwurfsmuster ~ Fliegengewicht ~
Prototypmuster
Erinnerungsmuster
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Iteratormuster
Besuchermuster
Proxy-Muster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
Fassadenmuster
Dekorationsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
Entwurfsmuster ~ Builder ~
[Java] Strategiemuster
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Factory Method Pattern
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
[Java] Singleton-Muster
Entwurfsmuster ~ Befehl ~
Abstraktes Fabrikmuster
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Interpreter ~
Factory Method Muster
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
[Java] Adaptermuster
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Java-Muster-Memo