[JAVA] Introduction aux modèles de conception (Abstract Factory)

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.

Exemple d'implémentation

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

Introduction aux modèles de conception (Abstract Factory)
Introduction aux modèles de conception (méthode d'usine)
Introduction aux modèles de conception (introduction)
Introduction aux modèles de conception (Builder)
Introduction aux modèles de conception (composite)
Introduction aux modèles de conception (poids mouche)
Introduction au prototype de modèles de conception
Introduction aux modèles de conception (Iterator)
Introduction aux modèles de conception (stratégie)
Modèle de conception ~ Usine abstraite ~
Modèle de conception important pour améliorer la maintenabilité
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine
modèle d'usine abstrait
Introduction à Ruby 2
Divers modèles de conception
Modèle d'usine abstraite
Modèles de conception Java
Introduction à web3j
Introduction à Micronaut 1 ~ Introduction ~
[Java] Introduction à Java
Introduction à la migration
Introduction à Java
Introduction à Doma
Introduction aux fichiers JAR
Introduction à Ratpack (8) - Session
Modèle de conception ~ Méthode d'usine ~
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
J'ai lu Hiroshi Yuki "Introduction aux modèles de conception appris en langage Java" (SB Creative)
Introduction à la mise en page Android
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
Introduction au style lambda
Introduction à la commande java
Introduction au développement de Keycloak
Étudier les modèles de conception du GoF
Introduction à la commande javac
Introduction au développement d'applications Android
Introduction à Ratpack (5) --Json & Registry
Introduction à Ratpack (7) --Guice & Spring
(Installation par points) Introduction à Java8_Impression
Introduction à Micronaut 2 ~ Test unitaire ~
[Java] Introduction à l'expression lambda
Introduction à Spring Boot ② ~ AOP ~
Introduction à Apache Beam (2) ~ ParDo ~
Introduction à l'API EHRbase 2-REST
[Java] Introduction à l'API Stream