[GO] [Viererbande] Designmuster lernen - Fluggewicht

Fliegen Weight-Light

** Inhaltsverzeichnis ** Es gibt verschiedene schwierige Dinge im Buch, aber kurz gesagt, das mehrfache Erstellen desselben Objekts ist in vielerlei Hinsicht teuer. Erstellen Sie daher eine Factory-Klasse und erstellen Sie eine Instanz nur einmal. Vermeiden wir es. Das ist der Zweck dieses Musters.

Zweck

Verwenden Sie die Freigabe, um eine große Anzahl kleiner Objekte effizient zu unterstützen.

Komponente

-Flyweight Abstrakte Objektklasse, die eine große Anzahl identischer Instanzen generieren muss ・ Betonfliegengewicht Fliegengewichtsbetonklasse -Klasse, die die UnsharedConcreteFlyweight Flyweight-Klasse verwaltet Klasse, die die Flyweight-Klasse als untergeordnetes Element enthält, z. B. Zeilen und Spalten -FlyweightFactory-Klasse, die die Flyweight-Klasse generiert ・ Client-Benutzer

Implementierung

Betonfliegengewicht Fliegengewicht Betonklasse

Zeichenklasse Klasse, die ein Zeichen verwaltet

Character.kt


package flyweight

class Character(private val character: Char) {
    fun print() {
        print(character)
    }
}

FlyweightFactory-Klasse, die die Flyweight-Klasse generiert

Charakterherstellungsklasse Erstellen Sie eine Factory-Klasse, die eine Instanz der Zeichenklasse erstellt und zusammenfasst. Durch Zusammenführen der Objekte, die einmal in der Klasse erstellt wurden, werden die zuvor erstellten Objekte nicht erneut erstellt.

CharacterFactory.kt


package flyweight

//Machen Sie es zu einem Singleton-Objekt
object CharacterFactory {

    val characterPool = HashMap<AllCharacter, Character>()

    enum class AllCharacter(val value: Char) {
        A('A'),
        B('B'),
        C('C'),
        D('D'),
        E('E'),
        F('F'),
        G('G'),
        H('H'),
        I('I'),
        J('J'),
        K('K'),
        L('L'),
        M('M'),
        N('N'),
        O('O'),
        P('P'),
        Q('Q'),
        R('R'),
        S('S'),
        T('T'),
        U('U'),
        V('V'),
        W('W'),
        X('X'),
        Y('Y'),
        Z('Z')
    }

    fun getCharacterObject(characterType: AllCharacter): Character {
        //Wenn nicht generiert, bündeln Sie die Instanz.
        characterPool[characterType]?.let {
            return it
        } ?: run {
            val char = Character(characterType.value)
            characterPool[characterType] = char
            return char
        }
    }
}

Client-Benutzer

Leute, die Buchstaben benutzen BANANE generieren.

Client.kt


package flyweight

class Client {
    init {
        val characters = ArrayList<Character>()
        // "BANANA"Generieren
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.B))
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.N))
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.N))
        characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))

        characters.forEach {
            it.print()
        }
    }
}

Ausgabeergebnis

[output]
BANANA

Recommended Posts

[Viererbande] Designmuster lernen - Fluggewicht
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen --Besucher
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmusterlernen --Iterator
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Prototyp
[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen - Staat
[Vierergruppe] Design Pattern Learning - Interpreter
[Viererbande] Design Pattern Learning - Builder
[Viererbande] Designmuster lernen - Brücke
[Viererbande] Designmuster lernen --Proxy
[Viererbande] Design Pattern Learning - Strategie
[Viererbande] Designmuster lernen --Adapter
[Viererbande] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Gang of Four (GoF) -Muster in Python
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
Entwurfsmuster #Builder
Entwurfsmuster #Adapter
Entwurfsmuster #Decorator
Entwurfsmuster #Observer
Entwurfsmuster #Facade
Entwurfsmuster #Strategie
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python