[GO] [Viererbande] Design Pattern Learning - Vermittler

Vermittler-Vermittler

** Inhaltsverzeichnis ** Wie der Name schon sagt, dient dieses Muster dazu, die Beziehungen zwischen Objekten durch die Mediatorklasse zu beseitigen.

Wir sehen oft, dass Spezifikationen wie die Schaltfläche nur aktiviert werden, wenn das Textfeld einen Wert enthält. Dies kann nur erreicht werden, wenn das Textfeldobjekt das Schaltflächenobjekt kennt (und es als Instanzvariable enthält). Mit solch einer einfachen Spezifikation ist es möglicherweise kein Problem, wenn es in direktem Zusammenhang steht, aber für kompliziertere Funktionen muss eine Klasse eine Reihe von Objekten kennen. Beseitigen Sie es mit der Zwischenklasse.

Schließlich führt jedes Muster zu einer erhöhten Orthogonalität.

Zweck

Definieren Sie ein Objekt, das die Interaktion einer Gruppe von Objekten kapselt. Das Mediator-Muster verringert den Kopplungsgrad, indem verhindert wird, dass Objekte explizit aufeinander verweisen. Dadurch kann die Interaktion von Objekten unabhängig voneinander geändert werden.

Komponente

・ Mediator Mediator abstrakte Klasse ・ ConcreteMediator-Betonklasse ・ Collegeague-Objekte, die Sie verschiedenen Objekten zuordnen möchten

Implementierung

Implementiert Kontrollkästchen, Textfelder und Schaltflächenobjekte. Textfelder können nur eingegeben werden, wenn eines der Kontrollkästchen aktiviert ist. Die Schaltfläche kann nur gedrückt werden, wenn das Kontrollkästchen aktiviert und das Textfeld leer ist.

Mediator Mediator abstrakte Klasse

Mediator.kt


package mediator

interface Mediator {

    /**
     *Ob die Taste gedrückt werden kann
     */
    fun buttonPress(): Boolean

    /**
     *Gibt an, ob ein Textfeld eingegeben werden kann
     */
    fun inputTextBox(): Boolean
}

ConcreteMediator Betonklasse

ConcreteMediator.kt


package mediator

class ConcreteMediator: Mediator {

    var checkBox: CheckBox? = null
    var textBox: TextBox? = null
    var button: Button? = null

    override fun buttonPress(): Boolean {
        return checkBox?.sex != null && textBox?.value?.isNotEmpty() ?: false
    }

    override fun inputTextBox(): Boolean {
        return checkBox?.sex != null
    }

}

Kollegenobjekte, die Sie verschiedenen Objekten zuordnen möchten

Abstrakte Klasse

Colleague.kt


package mediator

interface Colleague {
    enum class Type {
        CheckBox,
        TextBox,
        Button
    }

    val type: Type
    val mediator: Mediator
}

Konkrete Klasse · Kontrollkästchen

CheckBox.kt


package mediator

    class CheckBox(override val mediator: Mediator): Colleague {
    override val type = Colleague.Type.CheckBox
    enum class Sex {
        Male,
        Female
    }

    var sex: Sex? = null

    fun select(sex: Sex) {
        this.sex = sex
    }
}

·Textfeld

TextBox.kt


package mediator

class TextBox(override val mediator: Mediator): Colleague {
    override val type = Colleague.Type.TextBox
    var value = ""

    fun input(value: String) {
        if (mediator.inputTextBox()) {
            this.value = value
            println("Erfolgreiche Eingabe in ein Textfeld")
        } else {
            println("Fehler bei der Eingabe des Textfelds")
        }
    }
}

·Taste

Button.kt


package mediator

class Button(override val mediator: Mediator): Colleague {
    override val type = Colleague.Type.Button

    fun press() {
        if (mediator.buttonPress()) {
            println("Tastendruck erfolgreich")
        } else {
            println("Fehler beim Drücken der Taste")
        }
    }
}

Menschen, die verwenden

Client.kt


package mediator

class Client {
    init {
        val mediator = ConcreteMediator()
        val checkBox = CheckBox(mediator)
        val textBox = TextBox(mediator)
        val button = Button(mediator)

        mediator.checkBox = checkBox
        mediator.textBox = textBox
        mediator.button = button

        //Die Eingabe des Textfelds ist fehlgeschlagen, da das Kontrollkästchen nicht aktiviert ist
        textBox.input("Yamada Taro")

        //Auswahl der Kontrollkästchen
        checkBox.select(CheckBox.Sex.Female)

        //Drücken Sie die Taste Fehler, da kein Textfeld eingegeben wurde
        button.press()

        //Textfeldeingabe erfolgreich!!!
        textBox.input("Hanako Yamada")

        //Tastendruck erfolgreich!!!
        button.press()
    }
}

Ausgabeergebnis

[out-put]
Fehler bei der Eingabe des Textfelds
Fehler beim Drücken der Taste
Erfolgreiche Eingabe in ein Textfeld
Tastendruck erfolgreich

das ist alles

Recommended Posts

[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen --Besucher
[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] Designmuster lernen - Fluggewicht
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Lernen Sie das Entwurfsmuster "Mediator" 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
Ich habe über Designmuster (persönliches Memo) Teil 6 (Muster der Verantwortungskette, Fassadenmuster, Vermittlermuster) studiert.
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Entwurfsmuster #Factory-Methode
Deep Learning 1 Übung des Deep Learning
Entwurfsmuster # Template-Methode
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"