[GO] [Viererbande] Designmuster lernen --Besucher

Besucher --Besucher

** Inhaltsverzeichnis ** Ich verstehe, dass das Muster darin besteht, dem Besucher eine Schnittstelle für alle Elemente bereitzustellen und den Besucher die Verarbeitung in Bezug auf dieses Element übernehmen zu lassen.

Zweck

Stellt eine Operation dar, die für ein Element in einer Objektstruktur ausgeführt wird. Mit dem Besuchermuster können Sie eine neue Operation definieren, ohne die Klasse des Objekts zu ändern, zu dem Sie die Operation hinzufügen.

Komponente

・ Besucher Besucher abstrakte Klasse ・ ConcreteVisitor Besucherbetonklasse -Element Abstrakte Klasse von Elementen, die die Verarbeitung an Besucher übertragen -ConcreteElement Eine konkrete Klasse von Elementen, die die Verarbeitung an Besucher übertragen

Implementierung

Implementieren Sie ein Programm zum Kochen mit den vorbereiteten Zutaten.

Besucher Besucher abstrakte Klasse

Visitor.kt


package visitor

interface Visitor {
    fun visit(e: PotatoElement)
    fun visit(e: CarrotElement)
    fun visit(e: PorkElement)
    fun visit(e: OtherElement)
    fun serve()
}

ConcreteVisitor Besucherbetonklasse

Besucher machen 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()}In einem Topf schälen, schneiden und köcheln lassen.")
    }

    override fun visit(e: CarrotElement) {
        cookingCarrot = true
        println("${e.name()}Nehmen Sie die Knospen, schälen und schneiden Sie sie und kochen Sie sie in einem Topf.")
    }

    override fun visit(e: PorkElement) {
        cookingPork = true
        println("${e.name()}In einem Topf schneiden und köcheln lassen.")
    }

    override fun visit(e: OtherElement) {
        cookingOther = true
        println("Mit Curry Mehlschwitze${e.name()}In einen Topf geben und köcheln lassen.")
    }

    override fun serve() {
        if (cookingPotato && cookingCarrot && cookingOther && cookingPork) {
            println("Abschluss des Curry!")
        } else {
            println("Ich koche immer noch.")
        }
    }

}

Element Abstrakte Klasse von Elementen, die die Verarbeitung an Besucher übertragen

Materielle abstrakte Klasse

Element.kt


package visitor

interface Element {
    fun name(): String
    fun cooking(v: Visitor)
}

ConcreteElement Eine konkrete Klasse von Elementen, die die Verarbeitung auf den Besucher übertragen

Materialbetonklassen Kartoffel

PotatoElement.kt


package visitor

class PotatoElement: Element {
    override fun name(): String {
        return "Kartoffel"
    }

    override fun cooking(v: Visitor) {
        v.visit(this)
    }
}

Karotte

CarrotElement.kt


package visitor

class CarrotElement: Element {
    override fun name(): String {
        return "Karotte"
    }

    override fun cooking(v: Visitor) {
        v.visit(this)
    }
}

Schweinefleisch

PorkElement.kt


package visitor

class PorkElement: Element {
    override fun name(): String {
        return "Schweinefleisch"
    }

    override fun cooking(v: Visitor) {
        v.visit(this)
    }

}

Andere

OtherElement.kt


package visitor

class OtherElement: Element {
    override fun name(): String {
        return "Salz und Pfeffer"
    }

    override fun cooking(v: Visitor) {
        v.visit(this)
    }
}

Menschen, die verwenden

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]

Kartoffeln schälen, schneiden und in einem Topf köcheln lassen.
Karottenknospen nehmen, schälen, schneiden und in einem Topf köcheln lassen.
Das Schweinefleisch schneiden und in einem Topf köcheln lassen.
Ich koche immer noch.
Curry-Mehlschwitze, Salz und Pfeffer in einen Topf geben und köcheln lassen.
Abschluss des Curry!

Ich möchte gebratenes Gemüse machen, also werde ich Fried Vegetables Visitor implementieren.

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()}Schälen, schneiden und braten.")
    }

    override fun visit(e: CarrotElement) {
        cookingCarrot = true
        println("${e.name()}Nehmen Sie die Knospen, schälen und schneiden Sie und braten Sie.")
    }

    override fun visit(e: PorkElement) {
        cookingPork = true
        println("${e.name()}Schneiden und braten.")
    }

    override fun visit(e: OtherElement) {
        cookingOther = true
        println("${e.name()}In einen Topf geben und braten.")
    }

    override fun serve() {
        if (cookingPotato && cookingCarrot && cookingOther && cookingPork) {
            println("Fertigstellung von gebratenem Gemüse!")
        } else {
            println("Ich koche immer noch.")
        }
    }
}

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()
    }
}

Ausgabeergebnis

[out-put]
Kartoffeln schälen, schneiden und in einem Topf köcheln lassen.
Nehmen Sie die Karottenknospen, schälen und schneiden Sie sie und kochen Sie sie in einem Topf.
Das Schweinefleisch schneiden und in einem Topf köcheln lassen.
Ich koche immer noch.
Curry-Mehlschwitze, Salz und Pfeffer in einen Topf geben und köcheln lassen.
Abschluss des Curry!
--------------------------------
Kartoffeln schälen, schneiden und anbraten.
Karottenknospen nehmen, schälen, schneiden und braten.
Schneiden Sie das Schweinefleisch und braten Sie es.
Ich koche immer noch.
Salz und Pfeffer in einen Topf geben und anbraten.
Fertigstellung von gebratenem Gemüse!

Recommended Posts

[Viererbande] Designmuster lernen --Besucher
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmusterlernen --Iterator
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Prototyp
[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen - Staat
[Vierergruppe] Design Pattern Learning - Interpreter
[Viererbande] Design Pattern Learning - Builder
[Viererbande] Designmuster lernen - Brücke
[Viererbande] Designmuster lernen --Proxy
[Viererbande] Design Pattern Learning - Strategie
[Viererbande] Designmuster lernen --Adapter
[Viererbande] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Lernen Sie das Entwurfsmuster "Besucher" mit Python
Gang of Four (GoF) -Muster in Python
Entwurfsmuster #Builder
Entwurfsmuster #Adapter
Entwurfsmuster #Decorator
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
Entwurfsmuster #Observer
Entwurfsmuster #Facade
Entwurfsmuster #Strategie
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Entwurfsmuster #Factory-Methode
Besuchermuster in Python
Deep Learning 1 Übung des Deep Learning
Entwurfsmuster # Template-Methode
Über das Besuchermuster
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"