Bonjour à tous, je suis Lao Tian,Aujourd'hui, je vais partager avec vous原型模式des modèles de conception. Utilisez des histoires de vie appropriées et des scénarios de projet réels pour parler du modèle de conception, et enfin résumez le modèle de conception en une phrase.
Histoire
Je me souviens encore que lorsque je cherchais un emploi au cours de ma dernière année, j'ai accidentellement trouvé un modèle de CV de programmeur relativement beau sur Internet, puis toute la classe a commencé à le copier leurs CV comme des fous (disque U). Dans le même temps, il y a eu aussi une blague. Plusieurs étudiants ont copié leurs curriculum vitae sans changer le contenu ni leur nom. Ils les ont soumis à l'intervieweur (intervieweur de recrutement sur le campus) comme date limite. Plus tard, tout le monde devrait pouvoir deviner le résultat. Tout le monde est parti en stage, et certains d'entre eux étaient encore à la recherche d'un emploi.Retour de l'intervieweur de l'entreprise et d'autres camarades de classe plus tard : j'ai reçu plusieurs CV qui étaient exactement les mêmes. À mon retour, tout le monde savait quel était le problème après en avoir parlé. J'ai admis que je l'avais copié et soumis. sans le changer du tout. Quel dommage.
Divisez les copies de CV en deux types :
La première consiste à copier le CV puis à modifier les informations selon les vôtres
L'autre consiste à copier le CV sans changer le contenu.
Définition du modèle de prototype
Spécifiez les types d'objets à créer à l'aide d'une instance de prototype et créez de nouveaux objets en faisant face à ce prototype
signifiant grosso modo : Spécifiez la création d'objets avec un type d'instance de prototype et créez de nouveaux objets en copiant ces prototypes.
Mode Prototype :Prototype Pattern, un mode créatif.
L'appelant n'a pas besoin de connaître les détails de la création, ni d'appeler le constructeur pour créer l'objet.
Scénarios d'utilisation
Le mode prototype propose les scénarios d'utilisation suivants :
L'initialisation de la classe consomme plus de ressources
Un objet généré par new nécessite un processus très fastidieux (préparation des données, autorisations d'accès, etc.)
Le constructeur est plus compliqué
Quand un grand nombre de les objets sont générés dans le corps de la boucle
Au Spring, le modèle prototype est largement utilisé, par exemple :
scope='prototype'scope='prototype'
Nous pouvons encapsuler certains getters et setters dans une méthode d'usine, puis pour l'utilisateur, il suffit d'appeler la méthode, pas besoin de savoir comment les getters et les setters à l'intérieur sont gérés. Nous pouvons également utiliserImplémentation fournie par JDKCloneable pour obtenir une copie rapide.
Quatre façons de créer des objets :
nouveau, réflexion, Clone, sérialiser
Cas réel
Quelqu'un a-t-il rencontré ? problème courant. Il est stipulé dans le projet que la classe d'entité mappée avec la table de base de données ne peut pas être renvoyée au front-end, il y a donc généralement divers O renvoyés au front-end, tels que : XxxVO, XxxBO, XxxDTO... À ce moment-là, la scène suivante apparaîtra, et tout le monde l'aura peut-être deviné. Ce qui suit est le mappage avec la table de la base de données
UserEntityClasse d'entité.
public class UserEntity { private Long id; private String name; private Integer age; //....可能还有很多属性 //省略getter setter }
Copier après la connexion
Classe d'entité UserVO renvoyée au front-end ou à l'appelant.
public class UserVO { private Long id; private String name; private Integer age; //....可能还有很多属性 //省略getter setter }
Copier après la connexion
À ce stade, la UserEntity trouvée dans la base de données doit être convertie en UserVO puis renvoyée au front-end (ou à l'appelant).
public class ObjectConvertUtil { public static UserVo convertUserEntityToUserVO(UserEntity userEntity) { if (userEntity == null) { return null; } UserVo userVo = new UserVo(); userVo.setId(userEntity.getId()); userVo.setName(userEntity.getName()); userVo.setAge(userEntity.getAge()); //如果还有更多属性呢? return userVo; } }
Copie approfondie : copiez un CV, puis modifiez les informations du CV pour le personnaliser
Copie superficielle : copiez un CV et le contenu du CV reste complètement inchangé
Avantages :
Le mode prototype Java est basé sur la copie de flux binaire en mémoire, qui offre de meilleures performances que le nouveau direct.
Vous pouvez utiliser le clonage profond pour enregistrer l'état de l'objet, enregistrer une ancienne copie (la cloner) et lors de sa modification, il peut agir comme une fonction d'annulation.
Inconvénients :
nécessite de configurer la méthode de clonage. Lors de la transformation, les classes existantes doivent être modifiées, ce qui viole le "principe d'ouverture et de fermeture".
S'il existe plusieurs références imbriquées entre les objets, chaque calque doit être cloné.
Nous avons donné une explication complète du modèle de prototype à partir de sa définition, des scénarios d'utilisation, des cas réels, du clonage superficiel, du clonage profond, des avantages et des inconvénients, etc.
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!
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn