Cet article présente principalement le modèle de méthode de modèle des modèles de conception. L'éditeur pense qu'il est plutôt bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.
Définition : Définir le cadre d'un algorithme en fonctionnement, et reporter certaines étapes aux sous-classes afin que les sous-classes ne puissent pas modifier la structure de l'algorithme. Autrement dit, certaines étapes spécifiques de l’algorithme peuvent être redéfinies.
Type : Modèle de classe comportementale
Diagramme de classe :
En fait, La méthode modèle est un modèle fréquemment utilisé en programmation. Regardons d'abord un exemple. Un jour, le programmeur A a eu une tâche : étant donné un tableau d'entiers, trier les nombres du tableau de petit à grand, puis imprimer les résultats triés. Après analyse, cette tâche peut être grossièrement divisée en deux parties, le tri et l'impression. La fonction d'impression est facile à mettre en œuvre, mais le tri est un peu gênant. Mais A a un moyen de terminer d’abord la fonction d’impression et de trouver quelqu’un d’autre pour effectuer la fonction de tri.
abstract class AbstractSort { /** * 将数组array由小到大排序 * @param array */ protected abstract void sort(int[] array); public void showSortResult(int[] array){ this.sort(array); System.out.print("排序结果:"); for (int i = 0; i < array.length; i++){ System.out.printf("%3s", array[i]); } } }
Après avoir fini d'écrire, A s'est rendu chez le collègue B, qui venait d'obtenir son diplôme et a rejoint le poste il n'y a pas longtemps, et lui a dit : Il y a une tâche . J'ai déjà écrit la logique principale. Vous pouvez l'écrire. Implémentons le reste de la logique. J'ai donc donné la classe AbstractSort à B et demandé à B d'écrire l'implémentation. B l'a repris et a jeté un œil. C'était trop simple. Cela a pris 10 minutes à compléter. Le code est le suivant :
class ConcreteSort extends 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; // 最小值变量 int indexMin = 0; // 最小值索引变量 int Temp; // 暂存变量 for (int i = index; i < array.length; i++) { if (array[i] < MinValue){ // 找到最小值 MinValue = array[i]; // 储存最小值 indexMin = i; } } Temp = array[index]; // 交换两数值 array[index] = array[indexMin]; array[indexMin] = Temp; } }
Après l'écriture. remettez-le à A. A l'exécutera :
public class Client { public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组 public static void main(String[] args){ AbstractSort s = new ConcreteSort(); sshowSortResult(a); } }
Résultat d'exécution :
Résultat du tri : 0 1 3 4 5 7 9 10 12 32
fonctionne normalement. Bon, mission accomplie. Oui, il s'agit du modèle de méthode modèle. La plupart des diplômés qui viennent d'entrer sur le marché du travail devraient avoir une expérience similaire à celle de B. Pour une tâche complexe, les meilleures personnes de l'entreprise écriront la logique principale, puis écriront les méthodes apparemment simples en méthodes abstraites et les laisseront à d'autres collègues pour qu'elles les développent. Cette division du travail est souvent utilisée dans les entreprises disposant de niveaux évidents de personnel de programmation. Par exemple, si une équipe de projet comprend un architecte, un ingénieur senior et un ingénieur junior, l'architecte utilisera généralement un grand nombre d'interfaces et de classes abstraites pour enchaîner la logique de l'ensemble du système, et le codage de l'implémentation sera confié à l'ingénieur senior et l'ingénieur junior respectivement en fonction de la difficulté. Et si, avez-vous déjà utilisé le modèle de méthode modèle ?
La structure du modèle de méthode modèle
Le modèle de méthode modèle se compose d'une classe abstraite et d'une (ou d'un groupe de) classes d'implémentation via une structure d'héritage. Il existe trois types de méthodes dans les classes abstraites :
Méthodes abstraites : la classe parent ne fait que les déclarer mais ne les implémente pas. Au lieu de cela, elle définit les spécifications puis les implémente. eux par ses sous-classes.
Méthodes de modèles : déclarées et implémentées par des classes abstraites. De manière générale, les méthodes modèles appellent des méthodes abstraites pour compléter les fonctions logiques principales, et la plupart des méthodes modèles sont définies comme des types finaux, ce qui indique que les fonctions logiques principales ne peuvent pas être remplacées dans les sous-classes.
Méthode Hook : déclarée et implémentée par une classe abstraite. Mais les sous-classes peuvent être étendues et les sous-classes peuvent affecter la logique des méthodes modèles en étendant les méthodes hook.
La tâche des cours abstraits est de construire un cadre logique, qui est généralement rédigé par du personnel expérimenté, car la qualité des cours abstraits détermine directement la stabilité du programme.
Les classes d'implémentation sont utilisées pour implémenter les détails. La méthode modèle dans la classe abstraite complète la logique métier en implémentant la méthode d'extension de classe. Tant que la méthode d'extension dans la classe d'implémentation réussit le test unitaire et que la méthode modèle est correcte, il n'y aura généralement pas d'erreurs majeures dans la fonction globale.
Avantages et scénarios applicables de la méthode modèle
Facile à développer. De manière générale, la méthode modèle dans une classe abstraite est la partie qui n'est pas facile à modifier rétroactivement, tandis que la méthode abstraite est la partie qui est facile à modifier rétroactivement. Par conséquent, en ajoutant des classes d'implémentation, il est généralement facile d'étendre la fonction. , ce qui est conforme au principe d'ouverture et de fermeture.
Facile à entretenir. Pour le modèle de méthode modèle, c'est précisément parce que leur logique principale est la même que la méthode modèle est utilisée. Si la méthode modèle n'est pas utilisée, le même code peut être dispersé dans différentes classes, ce qui est très gênant à maintenir. .
Plus flexible. En raison de la méthode hook, l'implémentation de la sous-classe peut également affecter le fonctionnement de la logique principale dans la classe parent. Cependant, tout en étant flexible, étant donné que la sous-classe affecte la classe parent, elle viole le principe de substitution de Liskov et comporte également des risques pour le programme. Cela impose des exigences plus élevées en matière de conception de classes abstraites.
Lorsque plusieurs sous-classes ont les mêmes méthodes et que la logique de ces méthodes est la même, vous pouvez envisager d'utiliser le modèle de méthode modèle. Ce mode est également plus approprié lorsque le cadre principal du programme est le même mais que les détails sont différents.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!