** Table des matières ** Je comprends que le modèle consiste à fournir au visiteur une interface pour tous les éléments et à laisser le visiteur gérer le traitement lié à cet élément.
Représente une opération effectuée sur un élément sur une structure d'objet. Le modèle Visiteur vous permet de définir une nouvelle opération sans changer la classe de l'objet auquel vous ajoutez l'opération.
・ Classe de résumé de visiteur visiteur ・ ConcreteVisitor Visiteur de cours de béton -Element Classe abstraite d'éléments qui transfèrent le traitement aux visiteurs -ConcreteElement Une classe concrète d'éléments qui transfèrent le traitement aux visiteurs -Une classe qui peut énumérer des éléments ObjectStructure (il semble, mais je ne comprends pas la nécessité)
Mettre en place un programme de cuisson avec les ingrédients préparés.
Visitor.kt
package visitor
interface Visitor {
fun visit(e: PotatoElement)
fun visit(e: CarrotElement)
fun visit(e: PorkElement)
fun visit(e: OtherElement)
fun serve()
}
Visiteurs faisant du curry
CurryVisitor.kt
package visitor
class CurryVisitor: Visitor {
private var cookingPotato = false
private var cookingCarrot = false
private var cookingPork = false
private var cookingOther = false
override fun visit(e: PotatoElement) {
cookingPotato = true
println("${e.name()}Peler et couper et laisser mijoter dans une casserole.")
}
override fun visit(e: CarrotElement) {
cookingCarrot = true
println("${e.name()}Prenez les bourgeons, épluchez et coupez et laissez mijoter dans une casserole.")
}
override fun visit(e: PorkElement) {
cookingPork = true
println("${e.name()}Coupez et laissez mijoter dans une casserole.")
}
override fun visit(e: OtherElement) {
cookingOther = true
println("Au curry roux${e.name()}Mettez dans une casserole et laissez mijoter.")
}
override fun serve() {
if (cookingPotato && cookingCarrot && cookingOther && cookingPork) {
println("Achèvement du curry!")
} else {
println("Je cuisine encore.")
}
}
}
Classe abstraite matérielle
Element.kt
package visitor
interface Element {
fun name(): String
fun cooking(v: Visitor)
}
Classes de béton matériel Patate
PotatoElement.kt
package visitor
class PotatoElement: Element {
override fun name(): String {
return "Patate"
}
override fun cooking(v: Visitor) {
v.visit(this)
}
}
Carottes
CarrotElement.kt
package visitor
class CarrotElement: Element {
override fun name(): String {
return "Carottes"
}
override fun cooking(v: Visitor) {
v.visit(this)
}
}
porc
PorkElement.kt
package visitor
class PorkElement: Element {
override fun name(): String {
return "porc"
}
override fun cooking(v: Visitor) {
v.visit(this)
}
}
Autre
OtherElement.kt
package visitor
class OtherElement: Element {
override fun name(): String {
return "Sel et poivre"
}
override fun cooking(v: Visitor) {
v.visit(this)
}
}
Client.kt
package visitor
class Client {
init {
serveCurry()
}
private fun serveCurry() {
val pot = PotatoElement()
val c = CarrotElement()
val por = PorkElement()
val o = OtherElement()
val v = CurryVisitor()
pot.cooking(v)
c.cooking(v)
por.cooking(v)
v.serve()
o.cooking(v)
v.serve()
}
}
[out-put]
Peler et couper les pommes de terre et laisser mijoter dans une casserole.
Prenez les bourgeons de carottes, épluchez-les et coupez-les et laissez mijoter dans une casserole.
Coupez le porc et laissez mijoter dans une casserole.
Je cuisine encore.
Mettre le roux au curry, le sel et le poivre dans une casserole et laisser mijoter.
Achèvement du curry!
Je veux faire des légumes frits, donc je vais mettre en œuvre Fried Vegetables Visitor.
FriedVegetablesVisitor.kt
package visitor
class FriedVegetablesVisitor: Visitor {
private var cookingPotato = false
private var cookingCarrot = false
private var cookingPork = false
private var cookingOther = false
override fun visit(e: PotatoElement) {
cookingPotato = true
println("${e.name()}Peler, couper et faire frire.")
}
override fun visit(e: CarrotElement) {
cookingCarrot = true
println("${e.name()}Prenez les bourgeons, épluchez, coupez et faites frire.")
}
override fun visit(e: PorkElement) {
cookingPork = true
println("${e.name()}Coupez et faites frire.")
}
override fun visit(e: OtherElement) {
cookingOther = true
println("${e.name()}Mettez dans une casserole et faites frire.")
}
override fun serve() {
if (cookingPotato && cookingCarrot && cookingOther && cookingPork) {
println("Achèvement des légumes frits!")
} else {
println("Je cuisine encore.")
}
}
}
Client.kt
package visitor
class Client {
init {
serveCurry()
println("--------------------------------")
serveFriedVegetables()
}
private fun serveFriedVegetables() {
val pot = PotatoElement()
val c = CarrotElement()
val por = PorkElement()
val o = OtherElement()
val v = FriedVegetablesVisitor()
pot.cooking(v)
c.cooking(v)
por.cooking(v)
v.serve()
o.cooking(v)
v.serve()
}
private fun serveCurry() {
val pot = PotatoElement()
val c = CarrotElement()
val por = PorkElement()
val o = OtherElement()
val v = CurryVisitor()
pot.cooking(v)
c.cooking(v)
por.cooking(v)
v.serve()
o.cooking(v)
v.serve()
}
}
[out-put]
Épluchez et coupez les pommes de terre et laissez mijoter dans une casserole.
Prenez les bourgeons de carottes, épluchez-les, coupez-les et laissez mijoter dans une casserole.
Coupez le porc et laissez mijoter dans une casserole.
Je cuisine encore.
Mettre le roux au curry, le sel et le poivre dans une casserole et laisser mijoter.
Achèvement du curry!
--------------------------------
Épluchez les pommes de terre, coupez-les et faites-les frire.
Prenez les bourgeons de carottes, épluchez-les, coupez-les et faites-les frire.
Coupez le porc et faites-le frire.
Je cuisine encore.
Mettez du sel et du poivre dans une casserole et faites-les frire.
Achèvement des légumes frits!
Recommended Posts