23 Modèles de conception, chapitre 12: mode de méthode du modèle Java
Définition: définit le cadre d'un algorithme dans une opération et retarde certaines étapes d'une sous-classe, afin que la sous-classe puisse redéfinir certaines étapes spécifiques de l'algorithme sans modifier la structure de l'algorithme.
Type: modèle de comportement
Diagramme de classe:
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 déjà é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
Il fonctionne normalement. Ok, la tâche est terminée. C'est vrai, c'est le modèle de méthode de modèle. La plupart des diplômés qui viennent d'entrer sur le lieu de travail devraient avoir des expériences similaires à B. Une tâche complexe est écrite par les grandes personnes de l'entreprise, puis écrire les méthodes plus simples sur l'abstraction et les remettre à d'autres collègues pour se développer. Cette division du travail est souvent utilisée dans les entreprises avec des niveaux relativement évidents de programmeurs. Par exemple, si une équipe de projet a des architectes, des ingénieurs seniors et des ingénieurs juniors, les architectes utilisent généralement un grand nombre d'interfaces et de classes abstraites pour filer la logique de l'ensemble du système, et le codage d'implémentation est remis aux ingénieurs seniors et aux ingénieurs juniors en fonction de la difficulté. Et cela, avez-vous utilisé le mode méthode du modèle?
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 des classes abstraites. 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 et scénarios applicables de la méthode du modèle
Facile à développer. D'une manière générale, la méthode du modèle dans une classe abstraite est une partie qui n'est pas facile à changer réversement, tandis que la méthode abstraite est une partie qui est facile à changer de manière inverse. Par conséquent, en ajoutant la classe d'implémentation, il est généralement facile d'élargir la fonction, qui est conforme au principe de l'ouverture et de la fermeture.
Facile à entretenir. Pour le mode de méthode du modèle, c'est précisément parce que leur logique principale est la même que la méthode du modèle est utilisée. Si la méthode du modèle n'est pas utilisée, il est très gênant de maintenir le même code dans un gâchis.
Plus flexible. Parce qu'il existe des méthodes de crochet, la mise en œuvre des sous-classes peut également affecter le fonctionnement de la logique principale dans la classe parent. Cependant, tout en étant flexible, car les sous-classes affectent la classe des parents, la violation du principe de remplacement de Richter entraînera également des risques au programme. Cela impose des exigences plus élevées sur la conception des classes abstraites.
Lorsque plusieurs sous-classes ont la même méthode et que les méthodes sont logiquement les mêmes, vous pouvez envisager d'utiliser le modèle de méthode de modèle. Ce mode convient également à l'utilisation du programme lorsque le cadre principal du programme est le même et que les détails sont différents.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.