[GO] [Gang of Four] Apprentissage des modèles de conception - Poids du vol

Poids de la mouche-léger

** Table des matières ** Il y a diverses choses difficiles dans le livre, mais en bref, créer le même objet plusieurs fois est coûteux à bien des égards, alors créez une classe Factory et ne créez une instance qu'une seule fois. Evitons cela. C'est le but de ce modèle.

Objectif

Utilisez le partage pour prendre en charge efficacement un grand nombre de petits objets.

Composant

-Flyweight Classe abstraite d'objets qui doivent générer un grand nombre d'instances identiques ・ Béton Flyweight Classe de béton Flyweight -Classe qui gère la classe UnsharedConcreteFlyweight Flyweight Classe qui contient la classe Flyweight en tant qu'enfant, comme les lignes et les colonnes -FlyweightFactory Classe qui génère une classe Flyweight ・ Utilisateur client

la mise en oeuvre

ConcreteFlyweight Classe de béton Flyweight

Classe de caractère Classe qui gère un personnage

Character.kt


package flyweight

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

Classe FlyweightFactory qui génère la classe Flyweight

Classe de fabrication de caractères Créez une classe d'usine qui crée et regroupe une instance de la classe de caractères. En regroupant les objets une fois créés dans la classe, les objets qui ont été créés auparavant ne seront pas créés à nouveau.

CharacterFactory.kt


package flyweight

//Faites-en un objet singleton
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 {
        //S'il n'est pas généré, regroupez l'instance.
        characterPool[characterType]?.let {
            return it
        } ?: run {
            val char = Character(characterType.value)
            characterPool[characterType] = char
            return char
        }
    }
}

Utilisateur client

Les gens qui utilisent des lettres Générez BANANA.

Client.kt


package flyweight

class Client {
    init {
        val characters = ArrayList<Character>()
        // "BANANA"Générer
        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()
        }
    }
}

Résultat de sortie

[output]
BANANA

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception - Poids du vol
[Gang of Four] Apprentissage des modèles de conception
[Gang of Four] Apprentissage des modèles de conception --Singleton
[Gang of Four] Apprentissage des modèles de conception - Décorateur
[Gang of Four] Apprentissage des modèles de conception - Visiteur
[Gang of Four] Apprentissage des modèles de conception - Médiateur
[Gang of Four] Apprentissage des modèles de conception - Itérateur
[Gang of Four] Apprentissage des modèles de conception - Façade
[Gang of Four] Apprentissage des modèles de conception - Composite
[Gang of Four] Apprentissage des modèles de conception - Prototype
[Gang of Four] Apprentissage des modèles de conception --Mémento
[Gang of Four] Apprentissage des modèles de conception - État
[Gang of Four] Apprentissage des modèles de conception - Interprétation
[Gang of Four] Apprentissage des modèles de conception - Constructeur
[Gang of Four] Apprentissage des modèles de conception - Pont
[Gang of Four] Apprentissage des modèles de conception - Proxy
[Gang of Four] Apprentissage des modèles de conception - Stratégie
[Gang of Four] Apprentissage des modèles de conception - Adaptateur
[Gang of Four] Apprentissage des modèles de conception --Observer
[Gang of Four] Apprentissage des modèles de conception - Commande
[Gang of Four] Apprentissage des modèles de conception - Usine abstraite
[Gang of Four] Apprentissage des modèles de conception - Méthode d'usine
[Gang of Four] Apprentissage des modèles de conception - Chaîne de responsabilité
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
Modèles Gang of Four (GoF) en Python
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Modèle de conception #Builder
Modèle de conception #Adapter
Modèle de conception #Decorator
Modèle de conception #Observer
Modèle de conception #Facade
Modèle de conception #Strategy
Modèle de conception #Singleton
Modèle de conception #Proxy
Apprenez le modèle de conception «Chaîne de responsabilité» en Python