Maison  >  Article  >  Java  >  Explication détaillée du modèle d'usine abstraite JAVA avec des exemples

Explication détaillée du modèle d'usine abstraite JAVA avec des exemples

WBOY
WBOYavant
2022-04-20 12:50:492724parcourir

Cet article vous apporte des connaissances pertinentes sur java. Il présente principalement des problèmes liés au modèle d'usine abstrait. Apprenez ce qu'est le modèle d'usine abstrait basé sur des exemples réels. J'espère que cela vous sera utile. tout le monde.

Explication détaillée du modèle d'usine abstraite JAVA avec des exemples

Apprentissage recommandé : "Tutoriel vidéo Java"

Qu'est-ce que le modèle de fabrique abstraite ?

La définition du modèle de fabrique abstraite (AbstractFactory) : est une méthode qui fournit une classe d'accès pour créer un ensemble d'objets liés ou d'interfaces d'objets interdépendants, et la classe d'accès peut obtenir la structure schématique des produits de la même famille à différents niveaux sans spécifier la classe spécifique du produit souhaité.

Remplir les conditions :

  • Il existe plusieurs familles de produits dans le système, et chaque usine spécifique crée des produits de la même famille mais appartenant à des structures hiérarchiques différentes.
  • Le système ne peut consommer que les produits d'une famille à la fois, c'est-à-dire que les produits de la même famille peuvent être utilisés ensemble.

Avantages :

  • Vous pouvez gérer conjointement des produits multi-niveaux liés à la famille de produits au sein de la classe, sans avoir à introduire plusieurs nouvelles classes pour la gestion.

  • Lorsqu'une famille de produits est nécessaire, l'usine abstraite peut garantir que le client n'utilise toujours que le groupe de produits du même produit.

  • Abstract Factory améliore l'évolutivité du programme Lors de l'ajout d'une nouvelle famille de produits, il n'est pas nécessaire de modifier le code d'origine pour respecter le principe d'ouverture et de fermeture.

Inconvénients :

  • Lorsqu'un nouveau produit doit être ajouté à la famille de produits, toutes les classes d'usine doivent être modifiées. Cela augmente l’abstraction et la difficulté de comprendre le système.

Mise en œuvre d'Abstract Factory

Les principaux rôles dans le cas sont les suivants :
Abstract Factory (Abstract Factory) : L'héritage de Sept Héros
Factory (SimpleFactory) : Maître, Maîtresse
Abstrait Produit (Produit) : Météorite (matière première pour fabriquer des épées), un nid d'œufs de colombe (colombes non éclos)
Produit en béton : Sept Épées. Sept Pigeons Spirituels

Cas :
Le maître a l'héritage des Sept Héros et peut forger l'Épée du Soleil et cultiver de petits pigeons spirituels mâles.
L'épouse du maître possède l'héritage des Sept Héros et peut forger l'Épée Yin et élever des colombes.
Les Sept Héros retrouvent leur maître et leur épouse pour fabriquer leurs propres épées et adopter leurs propres petits pigeons.

Produit abstrait, produit

Interface S1 (Météorite) :

Une méthode est déclarée dans l'interface

public interface S1 {
    void show();}

Interface S2 (un nid d'œufs de colombe) :

Une méthode est déclarée dans la méthode d'interface

public interface S2 {
    void show();}

La classe A1 implémente l'interface S1 (Changhong Sword) :

implémente l'interface S1

public class A1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把长虹剑");

    }}

La classe B1 implémente l'interface S1 (Ice Soul Sword) :

implémente l'interface S1

public class B1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把冰魄剑");

    }}

La classe C1 implémente l'interface S1 (Ziyun Sword) :

implémente l'interface S1

public class C1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

La classe D1 implémente l'interface S1 (Yuhua Sword) :

implémente l'interface S1

public class D1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

Implémentation de la classe E1 Interface S1 (Green Light Sword) :

implémente l'interface Ss

public class E1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

La classe F1 implémente l'interface S1 (Ben Lei Sword) :

implémente l'interface Ss

public class F1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

La classe G1 implémente l'interface S1 (tourbillon Sword) :

implémente l'interface Ss

public class G1 implements S1 {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }}

La classe A2 implémente l'interface S2 (Lingge n°1) :

implémente l'interface S1

public class A2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}

La classe B2 implémente l'interface S2 (Lingge n°2) :

implémente l'interface S1

public class B2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");

    }}

La classe C2 implémente l'interface S2 (Lingge n°3) :

implémente l'interface S1

public class C2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

La classe D2 implémente l'interface S2 (Lingge n°4) :

Implement S1 interface

public class D2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

La classe E2 implémente l'interface S2 (Lingge n° 5) :

Implements Ss interface

public class E2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

La classe F2 implémente l'interface S2 (Lingge n° 6) :

Implement Ss interface

public class F2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

G2 class implémente l'interface S2 (Lingge No. 7):

Implements Ss interface

public class G2 implements S2 {
    @Override
    public void show() {
        System.out.println("灵鸽七号");
    }}

Abstract factory, factory

Zz interface (Seven Heroes héritage):

L'interface déclare une méthode de fabrication d'épée abc1() et une méthode d'élevage de pigeons abc2()

public interface Zz {
    S1 abc1(String a);
    S2 abc2(String a);}

La classe Nan implémente l'interface Zz (maître) :

implémente l'interface Zz

public class Nan implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("长虹剑".equals(a)) {
            s1 = new A1();
        } else if ("奔雷剑".equals(a)) {
            s1 = new F1();
        } else if ("青光剑".equals(a)) {
            s1 = new E1();
        } else if ("雨花剑".equals(a)) {
            s1 = new D1();
        } else if ("旋风剑".equals(a)) {
            s1 = new G1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽一号".equals(a)) {
            s2 = new A2();
        } else if ("灵鸽二号".equals(a)) {
            s2 = new F2();
        } else if ("灵鸽三号".equals(a)) {
            s2 = new E2();
        } else if ("灵鸽四号".equals(a)) {
            s2 = new D2();
        } else if ("灵鸽五号".equals(a)) {
            s2 = new G2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}

Nv la classe implémente l'interface Zz (épouse du maître) :

Implement Zz interface

public class Nv implements Zz {
    private static S1 s1;
    private static S2 s2;

    public S1 abc1(String a) {
        if ("冰魄剑".equals(a)) {
            s1 = new B1();
        } else if ("紫云剑".equals(a)) {
            s1 = new C1();
        } else {
            System.out.println("铸剑失败");
        }
        return s1;
    }
    public S2 abc2(String a) {
        if ("灵鸽六号".equals(a)) {
            s2 = new B2();
        } else if ("灵鸽七号".equals(a)) {
            s2 = new C2();
        } else {
            System.out.println("领养失败");
        }
        return s2;
    }}

Test

Catégorie de test :

public class Demo {
    public static void main(String[] args) {
        System.out.println("---------至阳传承-------------");
        //师傅
        Nan nan = new Nan();
        //造剑
        S1 a1 = nan.abc1("长虹剑");
        S1 d1 = nan.abc1("雨花剑");
        S1 e1 = nan.abc1("青光剑");
        S1 f1 = nan.abc1("奔雷剑");
        S1 g1 = nan.abc1("旋风剑");
        //养鸽子
        S2 a2 = nan.abc2("灵鸽一号");
        S2 d2 = nan.abc2("灵鸽二号");
        S2 e2 = nan.abc2("灵鸽三号");
        S2 f2 = nan.abc2("灵鸽四号");
        S2 g2 = nan.abc2("灵鸽五号");
        a1.show();
        d1.show();
        e1.show();
        f1.show();
        g1.show();
        a2.show();
        d2.show();
        e2.show();
        f2.show();
        g2.show();
        System.out.println("---------至阴传承-------------");
        //女铸剑师
        Nv nv = new Nv();
        S1 b1 = nv.abc1("冰魄剑");
        S1 c1 = nv.abc1("紫云剑");
        b1.show();
        c1.show();
        S2 b2 = nv.abc2("灵鸽六号");
        S2 c2 = nv.abc2("灵鸽七号");
        b2.show();
        c2.show();
    }}

Apprentissage recommandé : "tutoriel vidéo Java"

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer