[GO] [Gang of Four] Apprentissage des modèles de conception - Méthode d'usine

Méthode d'usine-méthode d'usine

** Table des matières ** Abstract Factory Je comprends que seule la partie de classe d'usine concrète du modèle correspond à ce modèle.

Objectif

Seule l'interface de création d'un objet est spécifiée et la sous-classe décide quelle classe est réellement instanciée. Le modèle de méthode d'usine laisse l'instanciation aux sous-classes.

Composant

-Produit Classe abstraite des pièces générées ・ Pièces générées par le béton ・ Classe abstraite du créateur de l'usine de fabrication de pièces ・ Usine de fabrication de pièces ConcreteCreator

la mise en oeuvre

Mettre en place un programme qui encourage les athlètes professionnels à ne jurer que par l'organisateur. Les athlètes représentatifs qui prêtent serment seront envoyés par leurs fédérations sportives respectives.

Produit Classe abstraite des pièces générées

Classe abstraite d'athlète professionnel

ProfessionalAthlete.kt


package factorymethod

abstract class ProfessionalAthlete(type: Type) {
    enum class Type(val value: String) {
        Soccer("Football"),
        BaseBall("base-ball")
    }

    val myType = type

    abstract fun athletesOath()
}

BétonProduit Pièces générées

Cours de béton de joueur de football professionnel

ProfessionalSoccerAthlete.kt


package factorymethod

class ProfessionalSoccerAthlete(name: String): ProfessionalAthlete(Type.Soccer) {

    private val name = name

    override fun athletesOath() {
        println("serment! je" + name + "est. Professionnel【" + myType.value + "] Jouez ouvertement avec un ballon de football en tant que joueur!")
    }
}

Cours de béton pour joueur de baseball professionnel

ProfessionalBaseBallAthlete.kt


package factorymethod

class ProfessionalBaseBallAthlete(name: String): ProfessionalAthlete(Type.BaseBall) {

    private val name = name

    override fun athletesOath() {
        println("serment! je" + name + "est. Professionnel【" + myType.value + "] En tant que joueur, utilisez une batte et une balle de baseball pour jouer ouvertement!")
    }
}

Avec ce qui précède, le lecteur (produit) a été implémenté. Ensuite, nous mettrons en place une fédération sportive (usine) qui envoie (crée) des athlètes (produits).

Créateur Classe abstraite d'usine de fabrication de pièces

Classe abstraite de la fédération sportive

SportsFederation.kt


package factorymethod

abstract class SportsFederation {
    fun getAthlete(): ProfessionalAthlete {
        return dispatchRepresentativeAthlete()
    }

    protected abstract fun dispatchRepresentativeAthlete(): ProfessionalAthlete
}

Usine de fabrication de pièces ConcreteCreator

Classe de béton de la Fédération de football

SoccerFederation.kt


package factorymethod

class SoccerFederation: SportsFederation() {
    override fun dispatchRepresentativeAthlete(): ProfessionalAthlete {
        return ProfessionalSoccerAthlete("Représentant Taro Sakada")
    }
}

Classe de béton de la Fédération de baseball

BaseBallFederation.kt


package factorymethod

class BaseBallFederation: SportsFederation() {
    override fun dispatchRepresentativeAthlete(): ProfessionalAthlete {
        return ProfessionalBaseBallAthlete("Homme de capitaine de livre de baseball")
    }
}

Enfin, nous mettrons en place un organisateur qui demandera et jurera les joueurs représentatifs (produit) de chaque fédération sportive (usine).

Utilisateur

Classe organisateur

Organizer.kt


package factorymethod

class Organizer {
    init {
        var athleteList: MutableList<ProfessionalAthlete> = mutableListOf()
        //Disposer de joueurs représentatifs de chaque fédération sportive
        //Joueur représentatif acquis de la fédération de football
        athleteList.add(SoccerFederation().getAthlete())
        //Joueur représentatif acquis de la fédération de baseball
        athleteList.add(BaseBallFederation().getAthlete())

        //Soyez juré
        for (athlete in athleteList) {
            athlete.athletesOath()
        }
    }
}

Nous avons maintenant un modèle qui peut être utilisé lorsque la classe de l'objet à créer ne peut pas être connue à l'avance. Je me sens comme.

Résultat de sortie

[output]
serment! Je suis le représentant Taro Sakada. En tant que joueur [de football] professionnel, jouez avec un ballon de football de manière simple!
serment! Je suis un capitaine de livre de baseball. Jouez en tant que joueur [de baseball] professionnel avec une batte et une balle de baseball.

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception - Méthode d'usine
[Gang of Four] Apprentissage des modèles de conception - Usine abstraite
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
[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 - Poids du vol
[Gang of Four] Apprentissage des modèles de conception - Chaîne de responsabilité
Design Pattern #Factory, méthode
Apprenez le modèle de conception "Méthode d'usine" en Python
Design Pattern #Template, méthode
Python Design Pattern - Méthode de modèle
Introduction d'une méthode de conception de contrôleur pilotée par les données
Modèles Gang of Four (GoF) en Python
Apprenez le modèle de conception "Méthode de modèle" en Python
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Clustering de méthodes de clustering
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
J'ai écrit un modèle de conception dans l'édition Kotlin Factory
Apprenez le modèle de conception «Chaîne de responsabilité» en Python