[Notes sur le modèle de conception] Modèle d'usine

Introduction:

L'un des modèles de conception les plus utilisés en Java.

Appartient au mode de création. Fournit un moyen optimal de créer des objets.

Dans le modèle de fabrique, la création d'un objet n'expose pas la logique de création au client et pointe vers l'objet nouvellement créé à l'aide d'une interface commune.

Intention : définir une interface pour créer un objet et laisser ses sous-classes décider de la classe de fabrique à instancier. Le modèle d'usine reporte la création aux sous-classes.

Résoudre le problème : le problème de la sélection de l'interface

Quand l'utiliser : lors de la planification explicite de la création d'instances différentes dans des conditions différentes

Comment résoudre : laissez sa sous-classe implémenter l'interface d'usine et retournez un produit abstrait

Code clé:

class Factory{
   接口 get接口(参数){

    if(参数 is a){
      return new A();
   }else if...
}
}

Exemple : si vous avez besoin d'une voiture, vous pouvez la récupérer directement à l'usine, quelle que soit la fabrication de la voiture

avantage:

① Si l'appelant souhaite créer un objet, il lui suffit de connaître le nom.

②Haute évolutivité, si vous souhaitez ajouter un produit. Il suffit d'étendre une classe d'usine.

③Protégez l'implémentation spécifique du produit et l'appelant ne se soucie que de l'interface du produit

défaut:

Chaque fois qu'un produit est ajouté, une usine d'implémentation de classe et d'objet spécifique doit être ajoutée, ce qui double le nombre de classes dans le système, augmente la complexité du système dans une certaine mesure et augmente également la dépendance de classes spécifiques dans le système.

scènes à utiliser :

Enregistreur de journal : l'enregistrement peut être enregistré sur le disque dur local, l'heure du système, le serveur distant, etc. L'utilisateur peut choisir où enregistrer le journal.

②Accès à la base de données : lorsque l'utilisateur ne sait pas seulement quel type de base de données le système utilise à la fin, et quand la base de données peut changer.

③ Pour concevoir un framework de connexion à un serveur , trois protocoles sont nécessaires, "POP3", "IMAP", et "HTTP".Ces trois peuvent être utilisés comme classes de produits pour implémenter conjointement une interface.

Précautions:

Le modèle de méthode d'usine peut être utilisé partout où des objets complexes doivent être générés.

Mais les objets simples, en particulier les objets qui ne peuvent être créés que par new, n'ont pas besoin d'utiliser le modèle d'usine.

============================

Code:

Créez une interface de forme :

public interface shape {
    void draw();
}

Une classe d'implémentation qui implémente l'interface Shape :

public class Rectangle implements shape {
    @Override
    public void draw() {
        System.out.println("rectangle draw");
    }
}
public class Circle implements shape{
    @Override
    public void draw() {
        System.out.println("circle draw");
    }
}
public class Squre implements shape{
    @Override
    public void draw() {
        System.out.println("square draw");
    }
}

Créer une usine qui génère des objets de classe d'entité en fonction des informations données

public class ShapeFatory {
    public shape getShape(String shapeType){
        if(shapeType==null)return null;
        if(shapeType.equalsIgnoreCase("circle")){
            return new Circle();
        }else if(shapeType.equalsIgnoreCase("rectangle")){
            return new Rectangle();
        }else if(shapeType.equalsIgnoreCase("square")){
            return new Squre();
        }
        return null;
    }
}

public class FactoryPatternDemo {
    public static void main(String[] args) {
        //创建一个工厂
        ShapeFatory shapeFatory=new ShapeFatory();
        //获取Circle对象
        shape shape1=shapeFatory.getShape("circle");
        shape1.draw();
        //获取Rectangle对象
        shape shape2=shapeFatory.getShape("rectangle");
        shape2.draw();
        //获取squre对象
        shape shape3=shapeFatory.getShape("square");
        shape3.draw();
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/m0_52043808/article/details/124087946
conseillé
Classement