Heim  >  Artikel  >  Java  >  Fliegengewicht

Fliegengewicht

DDD
DDDOriginal
2024-09-18 21:46:09774Durchsuche

Fliegengewicht

Eines der Strukturmuster zielt darauf ab, die Speichernutzung zu reduzieren, indem so viele Daten wie möglich mit ähnlichen Objekten geteilt werden.
Dies ist besonders nützlich, wenn Sie mit einer großen Anzahl ähnlicher Objekte arbeiten, wo das Erstellen einer neuen Instanz für jedes Objekt im Hinblick auf den Speicherverbrauch teuer wäre.
Schlüsselkonzepte:
Intrinsischer Zustand: Der Zustand, der von mehreren Objekten gemeinsam genutzt wird, ist unabhängig vom Kontext und bleibt über verschiedene Objekte hinweg gleich.
Extrinsischer Zustand: Der Zustand, der für jedes Objekt eindeutig ist und vom Client übergeben wird. Dieser Zustand kann variieren und wird nicht im Fliegengewicht-Objekt gespeichert

Hauptteilnehmer:

Fliegengewicht: Schnittstelle, über die das Fliegengewicht-Objekt den Extrinsic-Zustand empfängt und verwendet.
ConcreteFliegengewicht: Implementiert das Fliegengewicht und speichert den intrinsischen Zustand.
FliegengewichtFactory: Verwaltet die Fliegengewicht-Objekte und stellt die gemeinsame Nutzung von Schnittstellen sicher. Sie gibt ein vorhandenes Fliegengewicht zurück, wenn es bereits existiert.

Client (wie Hauptklasse): Behält einen Verweis auf Fliegengewicht bei und stellt einen extrinsischen Zustand bereit, wenn er mit dem Fliegengewicht-Objekt interagieren muss.

Nehmen wir ein Beispiel für ein Fliegengewichtsobjekt mit Charakter
Angenommen, wir haben einen Texteditor, der eine große Textmenge rendern muss. Jeder Charakter kann als Objekt dargestellt werden, aber ein separates Objekt für jeden Charakter würde viel Speicher verschwenden. Stattdessen können wir Fliegengewichts verwenden, um die Zeichenobjekte, die jeden Buchstaben darstellen, gemeinsam zu nutzen und den extrinsischen Zustand wie die Position oder Formatierung außerhalb zu speichern

Fliegengewicht

public interface Fliegengewicht {
    public void display(int x, int y);//x, y are the extrinsic state of the Fliegengewicht object
}

BetonFliegengewicht

public class CharacterFliegengewicht implements Fliegengewicht {
    private char ch;
    public CharacterFliegengewicht(char c){
        this.ch  = c;
    }
    @Override
    public void display(int x ,int y){
        System.out.println("[drawing character: "+this.ch+" at co-ordinates:("+x+","+y+")]");
    }

}

FliegengewichtFactory

public class FliegengewichtFactory {
    private static HashMap<character> flyweights = new HashMap();
    public static Fliegengewicht getFliegengewicht(char c){
        Fliegengewicht flyweight = flyweights.getOrDefault(c,null);
        if(null==flyweight){
            flyweight = new CharacterFliegengewicht(c);
            flyweights.put(c,flyweight);
        }
        return flyweight;
    }
}
</character>

Haupt

public class Main {
    public static void main(String args[]){
        Fliegengewicht flyweight1 = FliegengewichtFactory.getFliegengewicht('a');
        Fliegengewicht flyweight2 = FliegengewichtFactory.getFliegengewicht('b');
        Fliegengewicht flyweight3 = FliegengewichtFactory.getFliegengewicht('a');// will use the same object that is referenced by flyweight1

        flyweight1.display(1, 2);//'a' displayed at 1,2
        flyweight2.display(3, 4);//'b' displayed at 3,4
        flyweight3.display(5, 7); // 'a'(shared) displayed at 5,7
    }
}

Ausgabe:

[drawing character: a at co-ordinates:(1,2)]
[drawing character: b at co-ordinates:(3,4)]
[drawing character: a at co-ordinates:(5,7)]

Wichtige Punkte

  • Speichereffizienz: Reduziert die Speichernutzung durch die gemeinsame Nutzung von Objekten, insbesondere wenn der intrinsische Zustand groß ist oder viele Objekte vorhanden sind.
  • Leistungsverbesserung: Durch die Reduzierung der Anzahl der erstellten Objekte kann die Leistung der Anwendung bei der Verwaltung einer großen Anzahl von Objekten verbessert werden.

Nachteile
Komplexität: Das Muster kann die Komplexität des Codes erhöhen, insbesondere bei der getrennten Verwaltung der extrinsischen und intrinsischen Zustände.
Overhead: Wenn nur wenige Objekte geteilt werden können, kann das Fliegengewicht-Muster unnötige Komplexität ohne nennenswerte Speichereinsparungen mit sich bringen.

Das obige ist der detaillierte Inhalt vonFliegengewicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn