définition:
Un cadre pour définir un algorithme dans une opération, retardant certaines étapes vers une sous-classe. Cela permet à une sous-classe de redéfinir certaines étapes spécifiques d'un algorithme sans modifier la structure d'un algorithme.
Cela semble très haut de gamme, ma compréhension:
1. La classe parent déclare plusieurs méthodes abstraites (méthodes de base) et plusieurs méthodes spécifiques (méthodes de modèle)
2. La méthode abstraite est une étape d'un algorithme (processus) qui est implémenté dans une sous-classe
3. La méthode du modèle est un cadre d'algorithme (processus). Il a été convenu dans la classe parent d'implémenter les appels vers des méthodes de base et de terminer la logique fixe.
4. La structure d'un algorithme (processus) est définie dans la classe parent, et les détails de mise en œuvre spécifiques sont implémentés dans la sous-classe.
Remarque: Afin de prévenir les opérations malveillantes, la méthode du modèle général est ajoutée avec final et la réécriture est interdite.
Diagramme de classe générale:
En fait, la méthode du modèle est un modèle fréquemment utilisé dans la programmation. Voyons d'abord un exemple. Un jour, le programmeur a une tâche: donnez un tableau d'entiers, triez les nombres dans le tableau de petit à grand, puis imprimez les résultats triés. Après analyse, cette tâche peut être à peu près divisée en deux parties: le tri et l'impression. La fonction d'impression est facile à implémenter, donc le tri est un peu gênant. Mais A a un moyen, complétez d'abord la fonction d'impression et trouvez quelqu'un d'autre pour faire la fonction de tri.
Résumé Classe AbstractSort {/ ** * Trier le tableau de petit à grand * @param array * / protected abstract void tri (int [] array); public void showsortreult (int [] array) {this.sort (array); System.out.print ("Tri Result:"); for (int i = 0; i <array.length; i ++) {System.out.printf ("% 3s", array [i]); }}}Après avoir écrit, un collègue qui venait de terminer ses études et a commencé à travailler et a dit: Il y a une tâche, j'ai écrit la logique principale, afin que vous puissiez implémenter la logique restante. J'ai donc donné à la classe AbstractSort à B et laissé B écrire pour l'implémenter. B l'a pris et l'a vu. C'était trop simple. Cela a été fait en 10 minutes. Le code est le suivant:
Classe Concretesort étend AbstractSort {@Override Protected void Sort (int [] array) {for (int i = 0; i <array.length-1; i ++) {selectSort (array, i); }} private void selectSort (int [] array, int index) {int minvalue = 32767; // Variable Min Int IndexMin = 0; // Variable d'indice de valeur min int temp; // Variable de mise en scène pour (int i = index; i <array.length; i ++) {if (array [i] <minvalue) {// trouver la valeur minimale minvalue = array [i]; // Stockage La valeur minimale indexMin = i; }} Temp = array [index]; // échange deux valeurs numériques array [index] = array [indexMin]; array [indexMin] = temp; }}Après l'avoir écrit, donnez-le à A, et un va le prendre pour l'exécuter:
classe publique Client {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // Array de données préréglé public static void main (String [] args) {AbstractSort s = new Concretsort (); S.Showsortreult (a); }} Résultats en cours:
Résultats du tri: 0 1 3 4 5 7 9 10 12 32
Structure du modèle de méthode de modèle
Le modèle de méthode de modèle se compose d'une classe abstraite et d'un (ou d'un groupe de) classes d'implémentation à travers des structures de succession. Les méthodes dans les classes abstraites sont divisées en trois types:
Méthode abstraite: la classe parent ne déclare que mais ne l'implémente pas, mais définit les spécifications, puis les implémente par sa sous-classe.
Méthode du modèle: déclaré et implémenté par des classes abstraites. De manière générale, les méthodes de modèle appellent les méthodes abstraites pour remplir les principales fonctions logiques, et les méthodes de modèle sont principalement définies comme des types finaux, indiquant que les principales fonctions logiques ne peuvent pas être réécrites dans les sous-classes.
Méthode de crochet: déclarée et mise en œuvre par classe abstraite. Cependant, les sous-classes peuvent être étendues et les sous-classes peuvent affecter la logique des méthodes de modèle en étendant les méthodes de crochet.
La tâche des classes abstraites est de construire un cadre logique, qui est généralement écrit par du personnel expérimenté, car la qualité des classes abstraites détermine directement si le programme est stable.
Les classes d'implémentation sont utilisées pour implémenter les détails. La méthode du modèle dans les classes abstraites complète la logique métier en implémentant des méthodes d'extension de classe. Tant que la méthode d'extension de la classe d'implémentation passe un test unitaire, la fonction globale n'aura généralement pas d'erreurs majeures sous la prémisse que la méthode du modèle est correcte.
Avantages du mode méthode du modèle:
1. Encapsuler la partie inchangée et développer la partie variable
2. Extraire la partie publique du code pour une maintenance facile
3. Le comportement est contrôlé par la classe parentale et mis en œuvre par la classe enfant
Scénarios applicables pour le mode Méthode du modèle:
1. Plusieurs sous-classes ont des méthodes publiques et la logique est fondamentalement la même
2. Pour les algorithmes complexes, l'algorithme central est conçu comme une méthode de modèle et les fonctions détaillées sont implémentées par chaque sous-classe.
3. Refactorisation du code
Extension du modèle de méthode de modèle
Résumer:
La classe parent établit un cadre. Une fois que la classe enfant a réécrit certaines méthodes de la classe parent, il appelle la méthode héritée de la classe parent pour produire des résultats différents.