[GO] [Viererbande] Design Pattern Learning --Decorator

Dekorateur-Dekorateur

** Inhaltsverzeichnis ** Plötzlich geht die Geschichte schief, aber wenn ich Bücher über Designmuster und Objektorientierung lese, höre ich oft die Worte ** Verantwortung ** und ** Verantwortung ** für Objekte. Dies zeigt, was das Objekt tun muss. Es gibt auch das Prinzip der Einzelverantwortung, das besagt, dass es einen Grund geben sollte, die Klassen zu wechseln.

Die folgenden Klassen haben beispielsweise zwei Gründe, Änderungen vorzunehmen.

Bildschirmberechnung.kt


Berechnung des Schnittstellenbildschirms{
Spaß beim Zeichnen(): Boolean
lustige Ergänzung(num1: Int, num2: Int): Int
}

Nach dem Prinzip der Einzelverantwortung sollte es wie folgt getrennt werden.

Bildschirm.kt


Schnittstellenbildschirm{
Spaß beim Zeichnen(): Boolean
lustiger Bildschirmübergang(): Boolean
}

Berechnung.kt


Schnittstellenberechnung{
lustige Ergänzung(num1: Int, num2: Int): Int
lustige Subtraktion(num2: Int, num2: Int): Int
}

Ich verstehe, dass dieses Prinzip der Einzelverantwortung auch eine Idee ist, flexibel auf Veränderungen zu reagieren. Das ist alles für die Nebengeschichte.

Dann besteht das Hauptthema darin, dem Zweck dynamisch Verantwortung hinzuzufügen. Es handelt sich also um ein Muster, das Objekten (Instanzen) zu einem beliebigen Zeitpunkt Funktionen hinzufügt, ohne Vererbung zu verwenden.

Zweck

Fügen Sie dem Objekt dynamisch Verantwortlichkeiten hinzu. Das Decorator-Muster bietet eine flexiblere Erweiterungsmethode als die Unterklasse.

Komponente

· Komponente Eine abstrakte Klasse, die eine Schnittstelle definiert, die dynamisch Verantwortlichkeiten hinzufügen kann -ConcreteComponent Komponentenklasse Betonklasse Eine abstrakte Klasse, die eine Schnittstelle definiert, die der Decorator Component-Klasse Verantwortung hinzufügt ・ Betonklasse der Klasse Concrete Decorator Decorator

Implementierung

Implementieren Sie ein Programm, das zum Zeitpunkt der Erstellung einer Textansichtsinstanz verschiedene Funktionen hinzufügen kann.

Komponente Eine abstrakte Klasse, die eine Schnittstelle definiert, über die Sie Verantwortlichkeiten dynamisch hinzufügen können

Eine abstrakte Klasse, die eine Schnittstelle definiert, die der Decorator Component-Klasse Verantwortung hinzufügt

Komponentenschnittstelle anzeigen

ViewComponent.kt


package decorator

interface ViewComponent {
    fun draw()
}

ConcreteComponent Komponentenklasse konkrete Klasse

Textvorschau

TextView.kt


package decorator

class TextView: ViewComponent {
    override fun draw() {
        print("[Textvorschau]")
    }
}

ConcreteDecorator Decorator-Klasse Betonklasse

Dekorateur, um einen Schatten zu werfen

ShadowDecorator.kt


package decorator

class ShadowDecorator(viewComponent: ViewComponent): ViewComponent {
    val viewComponent = viewComponent

    override fun draw() {
        viewComponent.draw()
        addShadow()
    }

    private fun addShadow() {
        print(": Mit Schatten")
    }
}

Dekorateur zum Scrollen

ScrollDecorator.kt


package decorator

class ScrollDecorator(viewComponent: ViewComponent): ViewComponent {
    val viewComponent = viewComponent

    override fun draw() {
        viewComponent.draw()
        addScroll()
    }

    private fun addScroll() {
        print(": Bildlauffähig")
    }

}

Alle Teile sind fertig. Lass es uns benutzen.

** Nutzer **

ComponentManager.kt


package decorator

class ComponentManager {
    init {
        //Bildlaufbare schattierte Textansicht
        val scrollShadowTextView = ScrollDecorator(ShadowDecorator(TextView()))
        //Bildlaufbare Textansicht
        val scrollTextView = ScrollDecorator(TextView())

        //Zeichnung
        scrollShadowTextView.draw()
        print("\n")
        scrollTextView.draw()
    }
}

Ausgabeergebnis

Bei der Ausführung ist dies wie folgt.

[output]
[Textansicht]: Schatten: Bildlauffähig
[Textansicht]: Bildlauffähig

Recommended Posts

[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Designmuster lernen --Besucher
[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] Designmuster lernen - Fluggewicht
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Entwurfsmuster #Decorator
Lernen Sie das Designmuster "Decorator" mit Python
Gang of Four (GoF) -Muster in Python
Entwurfsmuster #Builder
Entwurfsmuster #Adapter
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
Deep Learning 1 Übung des Deep Learning
Dekorationsmuster in Java
Entwurfsmuster # Template-Methode
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"