** Inhaltsverzeichnis ** Abstract Factory Ich verstehe, dass nur der Teil des Musters der konkreten Fabrikklasse diesem Muster entspricht.
Es wird nur die Schnittstelle zum Erstellen eines Objekts angegeben, und die Unterklasse entscheidet, welche Klasse tatsächlich instanziiert wird. Das Factory-Methodenmuster überlässt die Instanziierung Unterklassen.
-Produkt Abstrakte Klasse der generierten Teile ・ ConcreteProduct Generierte Teile ・ Ersteller abstrakte Klasse der Teilefertigung Fabrik ・ Fabrik zur Herstellung von ConcreteCreator-Teilen
Implementieren Sie ein Programm, das Profisportler dazu ermutigt, beim Veranstalter zu schwören. Repräsentative Athleten, die den Eid ablegen, werden von ihren jeweiligen Sportverbänden entsandt.
Abstrakte Klasse für Profisportler
ProfessionalAthlete.kt
package factorymethod
abstract class ProfessionalAthlete(type: Type) {
enum class Type(val value: String) {
Soccer("Fußball"),
BaseBall("Baseball")
}
val myType = type
abstract fun athletesOath()
}
Professionelle Fußballspieler Betonklasse
ProfessionalSoccerAthlete.kt
package factorymethod
class ProfessionalSoccerAthlete(name: String): ProfessionalAthlete(Type.Soccer) {
private val name = name
override fun athletesOath() {
println("Eid! ich" + name + "ist. Fachmann【" + myType.value + "] Spielen Sie als Spieler offen mit einem Fußball!")
}
}
Professionelle Baseballspieler Betonklasse
ProfessionalBaseBallAthlete.kt
package factorymethod
class ProfessionalBaseBallAthlete(name: String): ProfessionalAthlete(Type.BaseBall) {
private val name = name
override fun athletesOath() {
println("Eid! ich" + name + "ist. Fachmann【" + myType.value + "] Verwenden Sie als Spieler einen Schläger und einen Baseballball, um offen zu spielen!")
}
}
Mit dem oben genannten wurde der Player (Produkt) implementiert. Als nächstes werden wir einen Sportverband (Fabrik) implementieren, der Athleten (Produkte) entsendet (erstellt).
Sportverband Abstrakte Klasse
SportsFederation.kt
package factorymethod
abstract class SportsFederation {
fun getAthlete(): ProfessionalAthlete {
return dispatchRepresentativeAthlete()
}
protected abstract fun dispatchRepresentativeAthlete(): ProfessionalAthlete
}
Fußballverein Betonklasse
SoccerFederation.kt
package factorymethod
class SoccerFederation: SportsFederation() {
override fun dispatchRepresentativeAthlete(): ProfessionalAthlete {
return ProfessionalSoccerAthlete("Vertreter Taro Sakada")
}
}
Baseball Federation Concrete Class
BaseBallFederation.kt
package factorymethod
class BaseBallFederation: SportsFederation() {
override fun dispatchRepresentativeAthlete(): ProfessionalAthlete {
return ProfessionalBaseBallAthlete("Baseball Buch Kapitän Mann")
}
}
Schließlich werden wir einen Organisator implementieren, der repräsentative Spieler (Produkt) von jedem Sportverband (Fabrik) anfordert und schwört.
Veranstalterklasse
Organizer.kt
package factorymethod
class Organizer {
init {
var athleteList: MutableList<ProfessionalAthlete> = mutableListOf()
//Lassen Sie repräsentative Spieler von jedem Sportverband entsenden
//Erworbener repräsentativer Spieler vom Fußballverband
athleteList.add(SoccerFederation().getAthlete())
//Erworbener repräsentativer Spieler vom Baseballverband
athleteList.add(BaseBallFederation().getAthlete())
//Werde vereidigt
for (athlete in athleteList) {
athlete.athletesOath()
}
}
}
Jetzt haben wir ein Muster, das verwendet werden kann, wenn die Klasse des Objekts, das erstellt werden muss, nicht im Voraus bekannt sein kann. Ich fühle mich wie.
[output]
Eid! Ich bin Vertreter Taro Sakada. Spielen Sie als professioneller Fußballspieler auf einfache Weise mit einem Fußball!
Eid! Ich bin ein Baseball-Buchkapitän. Spielen Sie als professioneller [Baseball-] Spieler mit einem Schläger und einem Baseballball.
Recommended Posts