Cet article résume Abstract Factory. Selon wikipedia, "Fournit un moyen de générer correctement un ensemble d'instances associées en fonction de la situation." Référence: [Design pattern (software)](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83 % 91% E3% 82% BF% E3% 83% BC% E3% 83% B3_ (% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2)))
J'ai fait référence à l'article suivant. Pensée: Design Pattern (Abstract Factory Pattern) Abstract Factory pour la mise en œuvre et la compréhension des modèles de conception GoF en Java
Si vous souhaitez utiliser les méthodes d'une autre classe d'une classe, vous devez instancier "new class name ()" sauf pour la classe statique. Dans ce modèle de conception, ce qui était nouveau pour la classe appelante est déplacé vers un groupe de classes appelé Factory, et l'instance de la classe que vous souhaitez utiliser est acquise via la méthode détenue par la classe Factory.
Abstract Factory représente le cas du ravitaillement en carburant à indice d'octane élevé et régulier dans une station-service.
NO | nom de fichier | Contenu de la classe |
---|---|---|
1 | AbstractFactory.java | Une classe abstraite qui définit le ravitaillement |
2 | ConcreteHighFactory.java | Classe de béton pour faire le plein de haut indice d'octane |
3 | ConcreteRegularFactory.java | Classe de béton pour faire le plein régulier |
4 | AbstractRefueling.java | Cours abstrait de ravitaillement |
5 | ConcreteHighRefueling.java | Classe de béton de ravitaillement à indice d'octane élevé |
6 | ConcreteRegularRefueling.java | Classe de béton de ravitaillement régulier |
7 | Main.java | Classe à exécuter |
Java
AbstractFactory.java
public abstract AbstractFactory {
abstract AbstractRefueling getAbstractRefueling();
}
ConcreteHighFactory.java
public class ConcreteHighFactory extends AbstractFactory {
@Override
public AbstractRefueling getAbstractRefueling();
return new ConcreteHighRefueling();
}
}
ConcreteRegularFactory.java
public class ConcreteRegularFactory extends AbstractFactory {
@Override
public AbstractRefueling getAbstractRefueling();
return new ConcreteRegularRefueling();
}
}
AbstractRefueling.java
public abstract class AbstractRefueling {
abstract payment();
abstract refueling();
}
ConcreteHighRefueling.java
public class ConcreteHighRefueling extends AbstractRefueling {
@Override
public payment() {};
@Override
public refueling() {};
}
ConcreteRegularRefueling.java
public class ConcreteRegularRefueling extends AbstractRefueling {
@Override
public payment() {};
@Override
public refueling() {};
}
Main.java
public class Main {
public static void main(String... args) {
Factory fa = exec("High");
AbstractRefueling ab = fa.getAbstractRefueling();
}
private static Factory exec(String env) {
if (env == "high") {
return new ConcreteHighFactory();
} else if (env == "regular") {
return new ConcreteRegularFactory();
}
}
}
Comme mentionné ci-dessus, nous recevons la classe pour faire le plein d'essence à indice d'octane élevé en supposant que de l'essence à indice d'octane élevé sera ajoutée sur la méthode principale. Si nécessaire, vous pouvez le remplacer par d'autres fonctions définies dans la classe Factory en réécrivant Conclete ~ Factory dans la méthode exec de Main.java. De plus, dans ce cas, nous avons implémenté deux types, à indice d'octane élevé et régulier, mais si vous devez ajouter un type de traitement tel que l'huile légère, vous pouvez simplement ajouter une classe car elle est abstraite, et celle existante. On peut dire qu'il a peu d'effet sur les classes à indice d'octane élevé et régulières. Cependant, bien qu'il soit flexible d'ajouter des classes, lors de l'ajout de pièces (dans cet exemple, ajouter une méthode de nettoyage de vitres en plus de la méthode de ravitaillement), la plage d'influence s'étend à toutes les classes Factory.
Liste des modèles de conception
Recommended Posts