


Qu'est-ce qu'un cours Factory ? Une classe d'usine est une classe qui crée un ou plusieurs objets de classes différentes.
Le modèle Factory est sans doute le modèle de conception le plus utilisé en génie logiciel. Dans cet article, je fournirai une explication détaillée des modèles de conception Simple Factory et Factory Method à l'aide d'un exemple de problème simple.
Le modèle d’usine simple
Disons que nous devons créer un système qui prend en charge deux types d'animaux, par exemple Chien et Chat, chacune des classes d'animaux devrait avoir une méthode qui fait le type de son de l'animal. Désormais, un client aimera utiliser le système pour émettre des sons d'animaux en fonction des entrées de l'utilisateur. Une solution de base au problème ci-dessus peut s'écrire comme suit :
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass class Dog(Animal): def make_sound(self): print("Bhow Bhow!") class Cat(Animal): def make_sound(self): print("Meow Meow!")
Avec cette solution, notre client utilisera le système comme ceci
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") if animal_type.lower() == 'dog': Dog().make_sound() elif animal_type.lower() == 'cat': Cat().make_sound()
Notre solution fonctionnera bien, mais Simple Factory Pattern dit que nous pouvons faire mieux. Pourquoi? Comme vous l'avez vu dans le code client ci-dessus, le client devra décider laquelle de nos classes d'animaux appeler à la fois. Imaginez que le système ait, disons, dix classes d'animaux différentes. Vous pouvez déjà voir à quel point il sera problématique pour notre client d'utiliser le système.
Donc, ici, le modèle Simple Factory dit simplement qu'au lieu de laisser le client décider quelle classe appeler, laissons le système décider pour le client.
Pour résoudre le problème en utilisant le modèle Simple Factory, il suffit de créer une classe d'usine avec une méthode qui prend en charge la création de l'objet animal.
... ... class AnimalFactory: def make_sound(self, animal_type): return eval(animal_type.title())().make_sound()
Avec cette approche, le code client devient :
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") AnimalFactory().make_sound(animal_type)
En résumé, le modèle Simple Factory consiste à créer une classe d'usine qui gère la création d'objets pour le compte d'un client.
Modèle de méthode d'usine
Pour en revenir à notre problème d'avoir un système qui ne prend en charge que deux types d'animaux (chien et chat), que se passera-t-il si cette limitation est supprimée et que notre système est prêt à prendre en charge n'importe quel type d'animal ? Bien entendu, notre système ne pouvait pas se permettre de fournir des implémentations pour des millions d’animaux. C’est là que le modèle de méthode Factory vient à la rescousse.
Dans le modèle Factory Method, nous définissons une classe ou une interface abstraite pour créer des objets, mais au lieu que l'usine soit responsable de la création de l'objet, la responsabilité est transférée à la sous-classe qui décide de la classe à instancier.
Composants clés du modèle de méthode Factory
Creator : Le Creator est une classe ou une interface abstraite. Il déclare la méthode Factory, qui est une méthode de création d'objets. Le Créateur fournit une interface pour créer des produits mais ne précise pas leurs classes concrètes.
Créateur concret : Les créateurs concrets sont les sous-classes du Créateur. Ils implémentent la méthode Factory, décidant quelle classe de produits concrète à instancier. Autrement dit, chaque Créateur de Béton est spécialisé dans la création d'un type de produit particulier.
Produit : Le produit est une autre classe ou interface abstraite. Il définit le type d'objets créés par la méthode Factory. Ces produits partagent une interface commune, mais leurs implémentations concrètes peuvent varier.
Produit en béton : Les produits en béton sont les sous-classes du produit. Ils fournissent les implémentations spécifiques des produits. Chaque produit en béton correspond à un type d'objet créé par la Méthode Factory.
Voici à quoi ressemblera notre code système en utilisant le modèle Factory Method :
Étape 1 : Définir le produit
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass class Dog(Animal): def make_sound(self): print("Bhow Bhow!") class Cat(Animal): def make_sound(self): print("Meow Meow!")
Étape 2 : Création de produits en béton
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") if animal_type.lower() == 'dog': Dog().make_sound() elif animal_type.lower() == 'cat': Cat().make_sound()
Étape 3 : Définir le créateur
... ... class AnimalFactory: def make_sound(self, animal_type): return eval(animal_type.title())().make_sound()
Étape 4 : Implémenter des créateurs concrets
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") AnimalFactory().make_sound(animal_type)
Et le client peut utiliser la solution comme suit :
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass
La solution Factory Method Pattern permet aux clients d'étendre le système et de fournir des implémentations d'animaux personnalisées si nécessaire.
Avantages du modèle de méthode d'usine
Découplage : il dissocie le code client des classes concrètes, réduisant ainsi les dépendances et améliorant la stabilité du code.
Flexibilité : Cela apporte beaucoup de flexibilité et rend le code générique, n'étant pas lié à une certaine classe pour l'instanciation. De cette façon, nous dépendons de l'interface (Product) et non de la classe ConcreteProduct.
Extensibilité : De nouvelles classes de produits peuvent être ajoutées sans modifier le code existant, favorisant un principe ouvert-fermé.
Conclusion
Le modèle de conception Factory Method offre un moyen systématique de créer des objets tout en gardant le code maintenable et adaptable. Il excelle dans les scénarios où les types d'objets varient ou évoluent.
Les frameworks, bibliothèques, systèmes de plug-ins et écosystèmes logiciels bénéficient de sa puissance. Cela permet aux systèmes de s'adapter à l'évolution des demandes.
Cependant, il doit être utilisé judicieusement, en tenant compte des besoins spécifiques de l'application et du principe de simplicité. Lorsqu'il est appliqué de manière appropriée, le modèle Factory Method peut contribuer de manière significative à la conception et à l'architecture globales d'un système logiciel.
Bon codage !!!
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!

PythonarRaySSupportVariousOperations: 1) SpecingExtractsSubSets, 2) A SPENDANT / EXPENSEDADDDSELLESS, 3) INSERtingPlaceSelelementsAtSpecific Positions, 4) RemovingdeleteSelements, 5) Sorting / ReversingChangeSes

NumpyArraysAressentialFor Applications est en train de réaliser des objets de manière numérique et une datamanipulation.

Useanarray.arrayoveralistinpythonwendealing withhomogeneousdata, performance-criticalcode, orinterfacingwithccode.1) homogeneousdata: ArraySaveMemorywithTypelements.2) performance-criticalcode

Non, NotallListOperationsResaSupportedByArrays, andviceVersa.1) ArraysDonotsUpportDynamicOperationsLIKEAPENDORINSERSERTWithoutresizing, qui oblige la performance.2) Listes de la glate-enconteConStanttimecomplexityfordirectAccessLikEArraysDo.

TOACCESSELlementsInapyThonList, Use Indexing, Négatif Indexing, Specing, Oriteration.1) IndexingStarTsat0.2) négatif Indexing Accesssheend.3) SlicingExtractSports.4) itérationussesforloopsoReNumerate.

ArraySinpython, en particulier Vianumpy, arecrucialinsciciencomputingfortheirefficiency andversatity.1) ils sont les opérations de data-analyse et la machineauning.2)

Vous pouvez gérer différentes versions Python en utilisant Pyenv, Venv et Anaconda. 1) Utilisez PYENV pour gérer plusieurs versions Python: installer PYENV, définir les versions globales et locales. 2) Utilisez VENV pour créer un environnement virtuel pour isoler les dépendances du projet. 3) Utilisez Anaconda pour gérer les versions Python dans votre projet de science des données. 4) Gardez le Système Python pour les tâches au niveau du système. Grâce à ces outils et stratégies, vous pouvez gérer efficacement différentes versions de Python pour assurer le bon fonctionnement du projet.

NumpyArrayShaveSeveralAdvantages OverStandardPyThonarRays: 1) TheaReMuchfasterDuetoc-bases Implementation, 2) Ils sont économisés par le therdémor


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Dreamweaver Mac
Outils de développement Web visuel
