Présentation des modèles de conception de [GoF](https://ja.wikipedia.org/wiki/Gang of for _ (Information Engineering)) ["Introduction aux modèles de conception appris dans le langage Java augmenté et révisé"]( https://www.amazon.co.jp/ Édition augmentée et révisée Introduction aux modèles de conception appris en langage Java-Yuki-Hiroshi / dp / 4797327030 / ref = pd_lpo_sbs_14_t_0? _ Encoding = UTF8 & psc = 1 & refRID = 2ZE4GPYNN55JGDR5QMHP) Je vais résumer sur.
** Le modèle défini dans la superclasse pour le cadre de traitement et la sous-classe pour l'implémentation spécifique ** est appelé le ** modèle de méthode de modèle . Parmi ceux-ci, la " méthode qui définit le cadre de traitement **" dans la superclasse est ** TemplateMethod **.
Les classes qui apparaissent dans le diagramme de classes ci-dessous sont utilisées dans le modèle TemplateMethod.
ConcreateClass
.
Par conséquent, les méthodes autres que les méthodes modèles sont des méthodes abstraites.À titre d'exemple spécifique, l'explication sera basée sur "** Manuel de procédure ", " Manuel de procédure de travail A " et " Manuel de procédure de travail B **".
** est la méthode (templateMethod) qui implémente le cadre de la procédure de travail. Les autres méthodes
start (),
work ()et ʻend ()
sont déclarées et appelées dans la méthode ʻoperation (), mais elles ne sont pas implémentées. Un traitement spécifique est défini dans les sous-classes ʻOperationAManual.class
et ʻOperationBManual.class`.AbstractManual.java
package templateMethod;
public abstract class AbstractManual{
public abstract void start();
public abstract void work();
public abstract void end();
public final void operation() {
start();
for (int i = 0; i < 3; i++) {
work();
}
end();
}
}
start ()
, work ()
et ʻend () . Le constructeur reçoit ** caractères ** et les affiche avec la méthode
work ()`.OperationAManual.java
package templateMethod;
public class OperationAManual extends AbstractManual {
private char ch;
public OperationAManual(char ch) {
this.ch = ch;
}
@Override
public void start() {
System.out.println("<<Travailler un début>>");
}
@Override
public void work() {
System.out.println(ch + "Est en train de traiter");
}
@Override
public void end() {
System.out.println("<<Travail A terminé>>");
}
}
, il implémente les méthodes abstraites
start () ,
work () et ʻend ()
, mais le contenu de l'implémentation est différent. ** **
Le constructeur reçoit la ** chaîne ** et la méthode work ()
la renvoie.OperationBManual.java
package templateMethod;
public class OperationBManual extends AbstractManual {
private String string;
public OperationBManual(String string) {
this.string = string;
}
@Override
public void start() {
System.out.println("**Commencer le travail B**");
}
@Override
public void work() {
System.out.println(string + "Est en train de traiter");
}
@Override
public void end() {
System.out.println("**Travail B terminé**");
}
}
et ʻOperationBManual
et appelle ʻoperation () `de TemplateMethod.Main.java
package templateMethod;
public class Main {
public static void main(String[] args) {
AbstractManual d1 = new OperationAManual('F');
AbstractManual d2 = new OperationBManual("HelloWorld");
d1.operation();
d2.operation();
}
}
Le résultat de l'exécution de Main.java
est le suivant.
J'ai appelé le même ʻoperation () `, mais je peux voir que la sortie est différente.
Résultat d'exécution
<<Travailler un début>>
Traitement F
Traitement F
Traitement F
<<Travail A terminé>>
**Commencer le travail B**
Traitement Hello World
Traitement Hello World
Traitement Hello World
**Travail B terminé**
En utilisant le modèle TemplateMethod, le cadre de traitement peut être normalisé. En faisant cela, il est possible d'empêcher plusieurs travailleurs de créer à partir du cadre de traitement comme ils le souhaitent, et les parties qui devraient être uniformes ne sont pas uniformes.
Vous avez découvert le modèle de méthode de modèle qui définit le squelette du processus. L'exemple de code est téléchargé ci-dessous, veuillez donc vous y référer si vous le souhaitez.
En outre, d'autres modèles de conception sont résumés ci-dessous, veuillez donc vous y référer également.
Recommended Posts