Définition : Le modèle de méthode d'usine est une abstraction supplémentaire du modèle d'usine simple. L'avantage est qu'il peut introduire de nouveaux produits dans le système sans modifier le code d'origine, c'est-à-dire qu'il satisfait. le principe d'ouverture et de fermeture. Créez une interface pour l'instanciation d'objet et laissez la sous-classe décider quelle classe est instanciée, reportant ainsi le processus d'instanciation de classe à la sous-classe.
Usine abstraite (AbstractFactory) : fournit une interface pour créer des produits, via laquelle l'appelant accède à la méthode d'usine de l'usine spécifique. créer le produit
Concrete Factory (ConcreteFactory) : met en œuvre les méthodes définies par l'usine abstraite et finalise la création de produits spécifiques
Abstract Product (Product) : définit les spécifications du produit et décrit les principales caractéristiques et performances du produit
Concrete Product (ConcreteProduct) : il implémente la méthode de définition des produits abstraits. Il existe des usines spécifiques pour créer des produits. Des usines spécifiques et des produits spécifiques correspondent un à un
Implémentation du modèle de méthode d'usine :
/** * 抽象工厂:提供具体工厂的共有方法 */ public interface Product { public void show(); } public class ConcreteProduct1 implements Product { @Override public void show() { System.out.println("具体产品1展示..."); } } public class ConcreateProduct2 implements Product { @Override public void show() { System.out.println("具体产品2展示..."); } } /** * 抽象工厂 */ public interface AbstractFactory { public Product createProduct(); } /** * 具体工厂1产生具体产品1 */ public class ConcreteFactory1 implements AbstractFactory { @Override public Product createProduct() { ConcreteProduct1 concreteProduct1 = new ConcreteProduct1(); System.out.println("具体工厂1创建具体产品1..."); return concreteProduct1; } public class ConcreteFactory2 implements AbstractFactory { @Override public Product createProduct() { System.out.println("具体工厂2产生具体产品2..."); return new ConcreateProduct2(); } }
. Méthode d'appel :
//获取具体产品1 Product product = new ConcreteFactory1().createProduct(); product.show(); Product product1 = new ConcreteFactory2().createProduct(); product1.show();
Étapes d'utilisation :
Créez une classe de produit abstraite et définissez les méthodes publiques du produit
Créez une classe de produit concrète (implémentez l'interface de produit abstraite) et définissez le produit spécifique généré
Créez une classe d'usine abstraite et définissez l'interface publique de l'usine spécifique
Créez une classe d'usine spécifique et définissez la méthode pour créer l'instance de produit spécifique correspondante
L'appelant appelle la méthode de la classe d'usine spécifique pour créer des instances de différents produits spécifiques
Résolution de problèmes : Résolution du problème de logique de méthode consistant à modifier la logique de méthode de la classe d'usine lors de l'ajout de nouveaux produits à la classe d'usine simple, qui est la principe spécial d'ouverture et de fermeture.
Quittez la création de produits spécifiques vers la sous-classe de la classe factory (usine spécifique). A ce moment, la classe factory n'est plus responsable de la création de tous les produits, mais donne l'interface que l'usine spécifique doit implémenter, pour que la méthode factory ajoute de nouveaux produits, il n'est pas nécessaire de modifier la logique de la classe factory, mais d'ajouter une nouvelle sous-classe factory, qui est conforme au principe d'ouverture et de fermeture.
Avantages :
Grande flexibilité pour la création de nouveaux produits, il vous suffit d'écrire une classe d'usine correspondante supplémentaire
Les utilisateurs n'ont qu'à indiquer le nom de l'usine. obtenir le produit souhaité, il n'est pas nécessaire de guider le processus de création spécifique du produit
Inconvénients :
Le nombre de classes est facile à être trop élevé, ce qui augmente la complexité
Chaque usine peut ne produisez qu'un seul type de produit, le prochain inconvénient est que vous pouvez utiliser une solution abstraite de modèle d'usine
Les clients ne se soucient que du nom de l'usine qui crée le produit et n'ont pas besoin de connaître le nom spécifique. nom du produit
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!