Problème :
En C, l'implémentation du modèle de méthode Factory conduit souvent à des compromis et à des limitations, tels que forcer l'allocation dynamique ou compromettre les performances et la surcharge du code. L'objectif est de trouver une solution générale et efficace qui permet une instanciation d'objet uniforme, différentes méthodes de construction et aucune surcharge significative.
Approche Java :
Création d'usines dans Java est simple en raison de son allocation dynamique d'objets, mais cette approche n'est pas directement applicable en C, car elle restreint l'utilisateur à des tâches dynamiques. allocation.
Surcharge par type de retour :
Tenter de surcharger les méthodes d'usine par type de retour n'est pas réalisable en C . Renommer les méthodes pour refléter leurs valeurs de retour introduit des incohérences et des conflits de noms. De plus, il s'appuie sur les optimisations du compilateur pour l'optimisation de la valeur de retour, qui peuvent s'avérer peu fiables pour les objets coûteux ou non copiables.
Construction en deux phases :
Séparation de l'allocation d'objets et l'initialisation utilisant une construction en deux phases nécessite de modifier la conception de l'objet, introduit des erreurs potentielles (car les objets peuvent ne pas toujours être dans un état valide) et limite la fonctionnalité du constructeur (initialisation des variables membres const, transmission arguments aux constructeurs de classes de base).
Solution correcte :
L'argument selon lequel la complexité de la construction d'objets justifie l'utilisation de classes d'usine distinctes est incorrect. Si possible, les constructeurs doivent s’occuper de toutes les tâches de construction nécessaires. Pour les surcharges de constructeur avec différents types de paramètres, envisagez d'utiliser des structures intermédiaires pour encapsuler les paramètres (comme démontré pour l'exemple de la classe Vector 2D).
Pour le polymorphisme et l'allocation dynamique, les usines sont les plus utiles. Ils aident à résoudre des problèmes tels que les surcharges de constructeur et permettent la création d'objets sans spécifier leur taille exacte au moment de la compilation. Cependant, l'utilisation uniforme des usines n'est généralement pas nécessaire et n'a pas d'impact significatif sur la qualité du code.
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!