Quel est le point du Prototype de modèle de conception?
Donc j'apprends sur les modèles de conception de l'école. Aujourd'hui on m'a parlé de "Prototype" modèle de conception.
Je dois manquer quelque chose, car je ne vois pas les avantages. J'ai vu des gens en ligne dire que c'est plus rapide que l'utilisation new
mais ce n'est pas logique; à un certain point, indépendamment de la façon dont le nouvel objet est créé, la mémoire doit être alloué pour cela.
N'est pas ce modèle exécuter dans les mêmes cercles que la "poule ou de l'œuf" problème? Depuis le Prototype de modèle essentiellement est juste le clonage des objets, à un certain moment, l'objet d'origine doit être lui-même créé (c'est à dire pas cloné). Cela signifie que j'ai besoin d'avoir une copie existante de chaque objet que je veux cloner déjà prêt à copier?
Quelqu'un peut expliquer ce que l'utilisation de ce modèle est?
- Cette question pourrait être mieux adapté pour les Programmeurs StackExchange depuis sa plus conceptuel question sur la programmation
Vous devez vous connecter pour publier un commentaire.
Le Prototype de modèle est une création de modèle basé sur le clonage d'une pré-configuré objet. L'idée est que vous choisissez un objet qui est configuré par défaut ou dans le stade de quelques cas d'utilisation spécifiques et alors vous un clone de l'objet et de configurer exactement à vos besoins.
Le modèle est utile pour supprimer un tas de code réutilisable, lorsque la configuration requise serait onéreux. Je pense que de Prototypes en tant que préréglage de l'objet, où vous enregistrez un tas d'etat comme un nouveau point de départ.
Le prototype de modèle a certains avantages, par exemple:
Par exemple, supposons que votre programme utilise des objets qui sont créés à partir des données analysées à partir de motley immuable informations récupérées sur le réseau. Plutôt que de récupérer les données et de les ré-analyse à chaque fois qu'un nouvel objet est créé, le prototype de modèle peut être utilisé pour tout simplement dupliquer l'objet original à chaque fois qu'une nouvelle est nécessaire.
Aussi, dire qu'un objet peut avoir des données qui utilise de grandes quantités de mémoire, telles que les données représentant des images. La mémoire peut être réduite par l'utilisation d'une copie sur écriture de style héritage, lorsque l'original, sans double compte, les données sont affichées jusqu'à ce que le code des tentatives de modification de ces données. Ensuite, les nouvelles données seront masque de référence pour les données d'origine.
Beaucoup d'autres réponses ici parler des économies de coûts de clonage déjà configuré objet, mais je voudrais élargir sur l'autre "point" du Prototype de modèle. Dans certaines langues, où les classes sont traitées comme des objets de première classe, vous pouvez configurer ce type d'objet est créée par un client au moment de l'exécution, en passant le nom de la classe. Dans des langages comme C++, où les classes ne sont pas traités comme des objets de première classe, le Prototype de modèle vous permet d'obtenir le même effet.
Par exemple, disons que nous avons un
Chef
dans un restaurant dont le travail consiste à préparer et servir les repas. Disons que leChef
est sous-payé et de mauvaise humeur, donc, il fait des plats comme le suivant:Maintenant, disons que nous voulons changer le
Chef
être un ostentatoire, le célèbre chef. Cela signifie qu'il/elle a ànew
différents plats dansprepareMeal()
. Nous tenons à modifier la méthode ainsi que les types de repas que senew
par leChef
peut être spécifié en tant que paramètres. Dans d'autres langues où les classes sont des objets de première classe, on peut tout simplement passer à la classe des noms comme paramètres de la méthode. Nous ne pouvons pas faire cela en C++, afin que nous puissions bénéficier du prototype de modèle:Noter qu'un
clone()
méthode crée une instance du type dérivé, mais retourne un pointeur vers le type parent. Cela signifie que nous pouvons changer le type de l'objet qui vient d'être créé en utilisant un autre type dérivé, et le client ne sait pas la différence. Cette conception nous permet désormais de configurer unChef
-- le client de nos Prototypes -- pour fabriquer différents types de plats au moment de l'exécution:Vous demandez peut-être utilisé de cette façon, le Prototype de modèle vous permet d'acheter la même chose que la Méthode de modèle, alors pourquoi ne pas l'utiliser? Parce que la Méthode de modèle nécessiterait une hiérarchie de créateur classes qui reflètent la hiérarchie des produits en cours de création; c'est à dire nous aurions besoin d'un
MozzarellaSticksWithKetchupCreator
avec unmake()
méthode, unHockeyPuckHamburgerWithSoggyFriesCreator
avec unmake()
méthode, et ainsi de suite. Ainsi, vous pouvez afficher le Prototype de modèle tout simplement comme un moyen de soulager le code de redondance est souvent présenté par la Méthode de motif.Cet argument est tiré de Design Patterns: Elements de Logiciels Orientés Objets Réutilisables, une.k.un. le "Gang des Quatre" livre.
Si vous souhaitez créer un objet, mais ne veulent pas passer par le cher objet de la création de la procédure où le réseau de base de données ou les appels sont effectués, puis utilisez le prototype de modèle. Il suffit de créer une copie de l'objet et de faire vos modifications sur elle.
Par rapport à l'abstrait modèle de fabrique, en utilisant le prototype de modèle, vous n'avez pas à avoir une grande usine de hiérarchie, juste un grand produit de la hiérarchie.
Si vous avez une exigence particulière, où vous devez remplir ou utiliser les mêmes données contenant l'Objet reproductible
et
il n'est pas possible de construire à partir d'un Objet existant, par exemple, [ la Construction de l'Objet à l'aide de Flux Réseau ]
ou
construire un Objet est temps [la Construction d'un Gros Objet, par l'obtention de données de Base de données], puis utiliser ce modèle de conception, comme dans la présente une Copie de l'Objet existant est créé, cette copie serait différent de l'Objet d'Origine et pourrait être utilisé comme Original.