In diesem Beitrag werde ich das Strukturmuster „Lightweight“ beschreiben. oder „opportunistisch“; (Fliegengewicht)
Dieses Muster gehört zur Gruppe der Strukturmuster
Sehen wir uns unten ein Beispiel an, wie das Muster funktioniert:
Warum wird es benötigt? Um RAM zu sparen. Ich stimme zu, dass dies in Zeiten der weit verbreiteten Verwendung von Java (das umsonst CPU und Speicher verbraucht) nicht mehr so wichtig ist, aber es lohnt sich, es zu verwenden.
Im obigen Beispiel werden nur 40 Objekte ausgegeben, aber wenn Sie die Anzahl auf 120.000 erhöhen, erhöht sich der Speicherverbrauch entsprechend.
Schauen wir uns den Speicherverbrauch an, ohne das Flyweight-Muster im Chromium-Browser zu verwenden:

Ohne Verwendung eines Musters beträgt der Speicherverbrauch etwa 300 Megabyte.
Jetzt fügen wir der Anwendung ein Muster hinzu und sehen uns den Speicherverbrauch an:

Bei Verwendung des Musters beträgt der Speicherverbrauch ~200 Megabyte, sodass wir in der Testanwendung 100 Megabyte Speicher eingespart haben. Bei ernsthaften Projekten kann der Unterschied viel größer sein.
Wie funktioniert es?
Im obigen Beispiel zeichnen wir 40 Katzen, der Übersichtlichkeit halber also 120.000. Jede Katze wird als PNG-Bild in den Speicher geladen und dann in den meisten Renderings zum Rendern in eine Bitmap (eigentlich BMP) konvertiert. Dies geschieht aus Geschwindigkeitsgründen, da das Rendern eines komprimierten PNG sehr lange dauert. Ohne das Muster zu verwenden, laden wir 120.000 Bilder von Katzen in den RAM und zeichnen, aber wenn wir das Muster „leichtgewichtig“ verwenden, können wir es nicht verwenden. Wir laden eine Katze in den Speicher und zeichnen sie 120.000 Mal mit unterschiedlichen Positionen und unterschiedlicher Transparenz. Die ganze Magie besteht darin, dass wir beim Rendern Koordinaten und Transparenz getrennt vom Katzenbild implementieren. Das Rendern benötigt nur eine Katze und verwendet ein Objekt mit Koordinaten und Transparenz für das korrekte Rendern.
Wie sieht es im Code aus?
Im Folgenden finden Sie Beispiele für die Sprache Rise< /p>
Ohne Verwendung eines Musters:

Das Katzenbild wird für jedes Objekt in der Schleife separat geladen – catImage.
Muster verwenden:
Ein Bild einer Katze wird von 120.000 Objekten verwendet.
Wo wird es verwendet?
Wird in GUI-Frameworks verwendet, zum Beispiel Apples “Wiederverwendung” (Wiederverwendung) von UITableViewCell-Tabellenzellen, was die Einstiegshürde für Anfänger erhöht, die dieses Muster nicht kennen. Wird auch häufig in der Spieleentwicklung verwendet.
Quellcode
https://gitlab.com/demensdeum/patterns/< /p>
Quellen
https://refactoring.guru/ru/design-patterns/ Fliegengewicht
http://gameprogrammingpatterns.com/flyweight.html
