Maison Java JavaBase Quels sont les trois modèles d'usine en Java ?

Quels sont les trois modèles d'usine en Java ?

Nov 02, 2020 pm 02:23 PM
java Modèle d'usine

Les trois modèles d'usine de Java : 1. Modèle d'usine simple, qui fournit une fonction pour créer des instances d'objet sans se soucier de son implémentation spécifique ; 2. Modèle de méthode d'usine 3. Modèle d'usine abstrait, qui fournit un moyen de créer ; une instance d'objet. Une interface pour une famille d'objets liés ou interdépendants sans spécifier leurs classes concrètes.

Quels sont les trois modèles d'usine en Java ?

(Tutoriel recommandé : Tutoriel d'introduction à Java)

1. 🎜>Définition d'une usine simple :

Fournit une fonction pour créer des instances d'objet sans se soucier de son implémentation spécifique. Le type de l'instance créée peut être une interface, une classe abstraite ou une classe concrète

implémentant l'interface de la voiture

public interface Car {
    String getName();
}

Classe Benz

public class Benz implements Car {
    @Override
    public String getName() {
        return "Benz";
    }
}

Type BMW

public class BMW implements Car {
    @Override
    public String getName() {
        return "BMW";
    }
}

Usine simple qui peut produire à la fois des BMW et des Mercedes-Benz

public class SimpleFactory {
    public Car getCar(String name){
        if (name.equals("BMW")){
            return new BMW();
        }else if (name.equals("benz")){
            return new Benz();
        }else {
            System.out.println("不好意思,这个品牌的汽车生产不了");
            return null;
        }
    }
}

Classe de test

public class SimpleFactoryTest {
    public static void main(String[] args){
        SimpleFactory simpleFactory = new SimpleFactory();
        Car car = simpleFactory.getCar("BMW");
        System.out.println(car.getName());
    }
}

Résultat du test

BMW
Selon la définition d'une usine simple, les utilisateurs veulent seulement le produit et ne se soucient pas de la façon dont le Le produit est produit. Il a l'air parfait. Mais réfléchissez-y, existe-t-il des usines dans ce monde qui produisent de tout ?

Évidemment, chaque marque automobile a sa propre usine de production et sa propre technologie de production. En mappant avec le framework Spring, nous avons de nombreux types de beans qui doivent être produits si nous comptons uniquement sur une simple usine pour l'implémenter, combien de if..else if devons-nous imbriquer dans la classe factory ?

Et lorsque nous produisons une voiture dans le code, elle en sort simplement une nouvelle, mais en fonctionnement réel, nous ne savons pas combien d'opérations sont nécessaires. Le chargement, l'enregistrement et d'autres opérations seront reflétés. la classe usine, donc cette classe Cela deviendra chaotique et peu pratique à gérer, donc chaque marque devrait avoir sa propre catégorie de production.

Parce que c'est dédié, c'est professionnel A cette époque, la méthode usine apparaît.

2. Modèle de méthode d'usine

Interface d'usine

//定义一个工厂接口,功能就是生产汽车
public interface Factory {
    Car getCar();
}

Usine Mercedes-Benz

public class BenzFactory implements Factory {
    @Override
    public Car getCar() {
        return new Benz();
    }
}

Usine BMW

public class BMWFactory implements Factory{
    @Override
    public Car getCar() {
        return new BMW();
    }
}

Classe de test

public class FactoryTest {
   public static void main(String[] args){
       Factory bmwFactory = new BMWFactory();
       System.out.println(bmwFactory.getCar().getName());
       Factory benzFactory = new BenzFactory();
       System.out.println(benzFactory.getCar().getName());
   }
}

Résultats des tests

BMW
Benz
D'après ce qui précède, le code montre que les voitures de différentes marques sont produites par différentes usines et qu'elles semblent parfaites. Mais si vous regardez la catégorie test, lorsqu'une personne veut acheter une voiture BMW (en supposant qu'il n'y ait pas de vendeur), alors elle doit se rendre à l'usine BMW pour en produire une pour elle, et quelques jours plus tard, elle veut acheter une Mercedes-Benz Lors de l'achat d'une voiture, vous devez vous rendre à l'usine Mercedes-Benz pour embaucher quelqu'un pour la produire, ce qui augmente sans aucun doute la complexité du fonctionnement de l'utilisateur. Alors existe-t-il une méthode conviviale ? A cette époque, le modèle abstrait de l'usine est apparu.

3. Modèle d'usine abstraite

Usine abstraite

public abstract class AbstractFactory {

     protected abstract Car getCar();
     
     //这段代码就是动态配置的功能
     //固定模式的委派
     public Car getCar(String name){
        if("BMW".equalsIgnoreCase(name)){
            return new BmwFactory().getCar();
        }else if("Benz".equalsIgnoreCase(name)){
            return new BenzFactory().getCar();
        }else if("Audi".equalsIgnoreCase(name)){
            return new AudiFactory().getCar();
        }else{
            System.out.println("这个产品产不出来");
            return null;
        }
    }
}

Usine par défaut

public class DefaultFactory extends AbstractFactory {

    private AudiFactory defaultFactory = new AudiFactory();
    
    public Car getCar() {
        return defaultFactory.getCar();
    }

}

Usine BMW

public class BMWFactory extends AbstractFactory {
    @Override
    public Car getCar() {
        return new BMW();
    }
}

Usine Mercedes-Benz

public class BenzFactory extends AbstractFactory {
    @Override    public Car getCar() {
            return new Benz();
    }
}

Classe de test

public class AbstractFactoryTest {
    public static void main(String[] args) {        
        DefaultFactory factory = new DefaultFactory();        
        System.out.println(factory.getCar("Benz").getName());            
    }
}

Résultats des tests

Benz
D'après le code ci-dessus, on peut voir que si l'utilisateur a besoin d'une voiture, il lui suffit d'accéder à la valeur par défaut usine pour présenter ses propres exigences (paramètres entrants), vous pouvez obtenir les produits que vous souhaitez sans avoir à trouver différentes usines de production en fonction des produits, ce qui est pratique à utiliser pour les utilisateurs.

Remarque : certaines personnes se moquent des modèles de conception, et certaines personnes les respectent comme des dieux, mais je suis d'accord avec elles.

D'après ma compréhension approximative, la chose classique à propos des modèles de conception est qu'ils résolvent la douleur à la fois de la personne qui écrit le code et de celle qui appelle le code. Différents modèles de conception sont différents. applicable uniquement à différents scénarios. Quant à savoir s’il faut l’utiliser ou non et comment l’utiliser, vous devez y réfléchir attentivement.

Mais il ne faut pas l'utiliser juste pour le plaisir de l'utiliser. Les subtilités ne peuvent être laissées à chacun qu'à goûter lentement.

Pour plus de connaissances liées à la programmation, veuillez visiter :

Cours de programmation

 ! !

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1545
276
Comment configurer la journalisation dans une application Java? Comment configurer la journalisation dans une application Java? Aug 15, 2025 am 11:50 AM

L'utilisation de SLF4J combinée avec la journalisation ou le log4j2 est le moyen recommandé de configurer les journaux dans les applications Java. Il introduit des bibliothèques API et implémentation en ajoutant des dépendances Maven correspondantes; 2. Obtenez l'enregistreur via le loggerfactory de SLF4J dans le code et écrivez le code journal découplé et efficace à l'aide de méthodes de journalisation paramétrée; 3. Définir le format de sortie du journal, le niveau, la cible (console, le fichier) et le contrôle du journal du package via Logback.xml ou les fichiers de configuration log4j2.xml; 4. Activer éventuellement la fonction de balayage de fichiers de configuration pour atteindre un ajustement dynamique du niveau de journal, et Springboot peut également être géré via des points de terminaison de l'actionneur; 5. Suivez les meilleures pratiques, y compris

Comment envoyer et recevoir des messages sur un WebSocket en Java Comment envoyer et recevoir des messages sur un WebSocket en Java Aug 16, 2025 am 10:36 AM

Créez un point de terminaison WebSocket Server pour définir le chemin à l'aide de @ServeRendPoint et gérer les connexions, la réception de messages, la fermeture et les erreurs via @onOpen, @onMessage, @OnClose et @onerror; 2. Assurez-vous que les dépendances Javax.websocket-API sont introduites pendant le déploiement et enregistrées automatiquement par le conteneur; 3. Le client Java obtient WebSocketContainer via le ContainerProvider, appelle ConnectToServer pour se connecter au serveur et reçoit des messages à l'aide de la classe d'annotation @clientendpoint; 4. Utilisez la session GetBasicre

Comment déployer une application Java Comment déployer une application Java Aug 17, 2025 am 12:56 AM

Préparez-vous en application par rapport à Mavenorgradletobuildajarorwarfile, externalisationConfiguration.2.ChoOSEADPLOYENDIRONMENT: Runonbaremetal / vmwithjava-jarandsystemd, deploywarontomcat, compeneriserisewithdocker, orusecloudplatformslikelise.

Liaison des données XML avec Castor en Java Liaison des données XML avec Castor en Java Aug 15, 2025 am 03:43 AM

CASTORENablesxml-to-javaObjectMappingViadefaultConverionsOrexplicitMappingFiles; 1) DefinejavaclasseswithGetters / seters; 2) useUnmarShallertOConvertXmltoObjects; 3)

PHPMYADMIN Sécurité Best Practices PHPMYADMIN Sécurité Best Practices Aug 17, 2025 am 01:56 AM

Pour protéger efficacement la phpmyadmin, plusieurs couches de mesures de sécurité doivent être prises. 1. Restreindre l'accès via IP, seules les connexions IP de confiance sont autorisées; 2. Modifiez le chemin d'ouverture par défaut vers un nom qui n'est pas facile à deviner; 3. Utilisez des mots de passe forts et créez un utilisateur MySQL dédié avec des autorisations minimisées, et il est recommandé d'activer l'authentification à deux facteurs; 4. Gardez la version PhpMyAdmin pour corriger les vulnérabilités connues; 5. Renforcer le serveur Web et la configuration PHP, désactiver les fonctions dangereuses et restreindre l'exécution des fichiers; 6. Forcer HTTPS à chiffrer la communication pour éviter les fuites d'identification; 7. Désactiver le phpmyadmin lorsqu'il n'est pas utilisé ou augmenter l'authentification de base HTTP; 8. Surveiller régulièrement les journaux et configurer Fail2ban pour se défendre contre la fissuration par force brute; 9. Supprimer la configuration et

Excel Autofill ne fonctionne pas Excel Autofill ne fonctionne pas Aug 15, 2025 pm 01:19 PM

EssureautofillisenabledByChecking "ActiverfillHandleandCellDrag-and-Drop" Infile> Options> Advanced; 2.CorrectlyUsethefillHandle - They Mallsquareathebottom-droite-theselectedCell - Draging withtheblackpluscursor, notthewhiteArrow; 3.UnMergells;

Quel est le mot-clé Assert en Java? Quel est le mot-clé Assert en Java? Aug 17, 2025 am 12:52 AM

TheassertKeywordInjavaisUsedTovalIdateShandshandingsDuringDevelopment, ThrowinganAssertionErroriftheconditionisfalse.2.ithastwoforms: AssertCondition; AndSersertCondition: Message; avecthelatterProvidActureCustomerMessage.3.

Vous n'utilisez pas actuellement un écran attaché à un GPU NVIDIA [FIX] Vous n'utilisez pas actuellement un écran attaché à un GPU NVIDIA [FIX] Aug 19, 2025 am 12:12 AM

Ifyousee "YouarenotusingAdisplayAttachedToannvidiagpu", assurez-vous

See all articles