[GO] [Gang of Four] Apprentissage des modèles de conception - Méthode du modèle

Modèle de méthode-modèle

Table des matières C'est un modèle qui fait abstraction de la partie commune de l'algorithme et implémente la partie avec un comportement différent dans la classe concrète. Si vous ne lisez que l'explication, c'est la même chose que le modèle Stratégie, mais il est réalisé par délégation là-bas et héritage ici.

L'héritage rend la dépendance plus forte, donc je pense personnellement que le modèle Strategy est meilleur. Je pense.

Cependant, cela nécessite moins de classes à implémenter.

Objectif

Nous définirons le squelette de l'algorithme pour une opération, et laisserons quelques étapes à la définition dans la sous-classe. Le modèle de méthode de modèle redéfinit une étape dans un algorithme avec une sous-classe sans changer la structure de l'algorithme.

Composant

・ Partie commune AbstractClass ・ ConcreteClass Pas commun

la mise en oeuvre

Stratégie Implémentez un programme qui trie les tableaux, similaire au modèle.

Partie commune de la classe abstraite

BubbleSort.kt


package templatemethod

abstract class BubbleSort {
    private var operations = 0
    protected var length = 0

    protected fun doSort(): Int {
        operations = 0
        if (length <= 1) return operations

        for (nextToLast in length - 1 downTo 0) {
            for (index in 0 until nextToLast) {
                if (outOfOrder(index)) swap(index)
                operations++
            }
        }
        return operations
    }

    protected abstract fun swap(index: Int)
    protected abstract fun outOfOrder(index: Int): Boolean
}

Pièces de ConcreteClass qui ne sont pas courantes

Classe de béton de type int

IntBubbleSort.kt


package templatemethod

class IntBubbleSort: BubbleSort() {

    private lateinit var array: Array<Int>

    fun sort(theArray: Array<Int>): Int {
        array = theArray
        length = theArray.size
        return doSort()
    }

    override fun swap(index: Int) {
        val temp = array[index]
        array[index] = array[index + 1]
        array[index + 1] = temp
    }

    override fun outOfOrder(index: Int): Boolean {
        return array[index] > array[index + 1]
    }

}

Classe de béton à matrice double

DoubleBubbleSort.kt


package templatemethod

class DoubleBubbleSort: BubbleSort() {

    private lateinit var array: Array<Double>

    fun sort(theArray: Array<Double>): Int {
        array = theArray
        length = theArray.size
        return doSort()
    }

    override fun swap(index: Int) {
        val temp = array[index]
        array[index] = array[index + 1]
        array[index + 1] = temp
    }

    override fun outOfOrder(index: Int): Boolean {
        return array[index] > array[index + 1]
    }
}

Eh bien, cela peut également être réalisé dans une classe en utilisant Generics ...

Les personnes qui utilisent

Client.kt


package templatemethod

class Client {
    init {
        val intArray = arrayOf(332, 1, 13, 3232, 456, 22, 5)
        println("Avant de trier le tableau Int")
        intArray.forEach {
            println(it)
        }
        //Tri
        IntBubbleSort().sort(intArray)
        println("Après le tri du tableau Int")
        intArray.forEach {
            println(it)
        }

        val doubleArray = arrayOf(10.01, 10.5, 10.4123, 10.12, 10.87)
        println("Double avant le tri")
        doubleArray.forEach {
            println(it)
        }
        //Tri
        DoubleBubbleSort().sort(doubleArray)
        println("Après le tri par double tableau")
        doubleArray.forEach {
            println(it)
        }
    }
}

Résultat de sortie

[out-put]
Avant de trier le tableau Int
332
1
13
3232
456
22
5
Après le tri du tableau Int
1
5
13
22
332
456
3232
Double avant le tri
10.01
10.5
10.4123
10.12
10.87
Après le tri par double tableau
10.01
10.12
10.4123
10.5
10.87

C'est un modèle assez basique. Je pense qu'il sera utilisé partout.

c'est tout

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
[Gang of Four] Apprentissage des modèles de conception - Méthode d'usine
[Gang of Four] Apprentissage des modèles de conception
[Gang of Four] Apprentissage des modèles de conception --Singleton
[Gang of Four] Apprentissage des modèles de conception - Décorateur
[Gang of Four] Apprentissage des modèles de conception - Visiteur
[Gang of Four] Apprentissage des modèles de conception - Médiateur
[Gang of Four] Apprentissage des modèles de conception - Itérateur
[Gang of Four] Apprentissage des modèles de conception - Façade
[Gang of Four] Apprentissage des modèles de conception - Prototype
[Gang of Four] Apprentissage des modèles de conception --Mémento
[Gang of Four] Apprentissage des modèles de conception - État
[Gang of Four] Apprentissage des modèles de conception - Interprétation
[Gang of Four] Apprentissage des modèles de conception - Pont
[Gang of Four] Apprentissage des modèles de conception - Proxy
[Gang of Four] Apprentissage des modèles de conception - Stratégie
[Gang of Four] Apprentissage des modèles de conception - Adaptateur
[Gang of Four] Apprentissage des modèles de conception --Observer
[Gang of Four] Apprentissage des modèles de conception - Commande
[Gang of Four] Apprentissage des modèles de conception - Poids du vol
[Gang of Four] Apprentissage des modèles de conception - Usine abstraite
[Gang of Four] Apprentissage des modèles de conception - Chaîne de responsabilité
Design Pattern #Template, méthode
Python Design Pattern - Méthode de modèle
Apprenez le modèle de conception "Méthode de modèle" en Python
[Explication détaillée] Modèle de méthode de modèle
Modèle de méthode de modèle en Java
Introduction d'une méthode de conception de contrôleur pilotée par les données
Modèles Gang of Four (GoF) en Python
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Apprenez le modèle de conception "Méthode d'usine" en Python
Clustering de méthodes de clustering
Modèle de conception #Builder
Modèle de conception #Adapter
Modèle de conception #Decorator
Modèle de conception #Observer
Modèle de conception #Facade
Modèle de conception #Strategy
Modèle de conception #Singleton
Modèle de conception #Proxy
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
J'ai écrit un modèle de conception dans l'édition de modèle kotlin