„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Fliegengewicht

Fliegengewicht

Veröffentlicht am 06.11.2024
Durchsuche:407

Flyweight

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 es um eine große Anzahl ähnlicher Objekte geht, bei denen 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 Flyweight-Objekt gespeichert

Wichtige Teilnehmer:

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

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

Nehmen wir ein Beispiel für ein Flyweight-Objekt 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 Flyweights verwenden, um die Zeichenobjekte, die jeden Buchstaben darstellen, gemeinsam zu nutzen und den extrinsischen Zustand wie die Position oder Formatierung außerhalb von

zu speichern.

Fliegengewicht

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

BetonFliegengewicht

public class CharacterFlyweight implements Flyweight {
    private char ch;
    public CharacterFlyweight(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 ")]");
    }

}

FlyweightFactory

public class FlyweightFactory {
    private static HashMap flyweights = new HashMap();
    public static Flyweight getFlyweight(char c){
        Flyweight flyweight = flyweights.getOrDefault(c,null);
        if(null==flyweight){
            flyweight = new CharacterFlyweight(c);
            flyweights.put(c,flyweight);
        }
        return flyweight;
    }
}

Hauptsächlich

public class Main {
    public static void main(String args[]){
        Flyweight flyweight1 = FlyweightFactory.getFlyweight('a');
        Flyweight flyweight2 = FlyweightFactory.getFlyweight('b');
        Flyweight flyweight3 = FlyweightFactory.getFlyweight('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 gemeinsam genutzt werden können, führt das Flyweight-Muster möglicherweise zu unnötiger Komplexität ohne nennenswerte Speichereinsparungen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/prashantrmishra/flyweight-3k4b?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3