** 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.
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.
-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
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.
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()
}
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).
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
}
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).
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.
[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