Définition: utilisez des instances de prototype pour spécifier le type d'objets à créer et créer de nouveaux objets en copiant ces prototypes.
Type: Créer un modèle de classe
Diagramme de classe:
Le motif prototype est principalement utilisé pour la copie d'objets, et son noyau est le prototype de classe prototype dans le diagramme de classe. La classe prototype doit répondre aux deux conditions suivantes:
Implémentez l'interface clonable. Il existe une interface clonable dans le langage Java, qui n'a qu'une seule fonction, qui consiste à informer la machine virtuelle lors de l'exécution qui peut utiliser la méthode de clone en toute sécurité sur les classes qui implémentent cette interface. Dans une machine virtuelle Java, seules les classes qui implémentent cette interface peuvent être copiées, sinon un clonenotsupportedException sera lancé à l'exécution.
Réécrivez la méthode du clone dans la classe d'objets. En Java, les classes de parents de toutes les classes sont des classes d'objets. Il existe une méthode de clone dans la classe d'objets, qui renvoie une copie de l'objet, mais sa portée est de type protégé, et les classes générales ne peuvent pas être appelées. Par conséquent, la classe Prototype doit modifier la portée de la méthode du clone au type public.
Le mode prototype est un mode relativement simple et est très facile à comprendre. Pour implémenter une interface et réécrire une méthode, le mode prototype est terminé. Dans les applications pratiques, les motifs prototypes apparaissent rarement seuls. Il est souvent mélangé avec d'autres modèles, et son prototype de classe prototype est également souvent remplacé par des classes abstraites.
Code d'implémentation:
Package PrototypePattern; classe publique PrototypeClass implémente Clonable {@Override Protected PrototypeClass Clone () {PrototypeClass PrototypeClass = null; try {prototypeclass = (prototypeclass) super.clone (); } catch (clonenotsupportEdException e) {// Bloc de catch généré automatiquement de TODO E.PrintStackTrace (); } return prototypeClass; }}Client:
Package PrototypePattern; classe publique Client {public static void main (String [] args) {prototypeClass obj1 = new PrototypeClass (); PrototypeClass obj2 = obj1.clone (); System.out.println (OBJ1); System.out.println (obj2); }} Avantages du mode prototype et des scénarios applicables
La création d'objets utilisant le mode prototype est bien meilleure que directement nouvelle, car la méthode de clone de la classe d'objets est une méthode locale qui manipule directement les flux binaires en mémoire, en particulier lors de la copie de gros objets, la différence de performance est très évidente.
Un autre avantage de l'utilisation de modèles de prototypes consiste à simplifier la création d'objets, ce qui rend la création d'objets aussi simples que la copie-coller lorsque nous modifions un document.
En raison des avantages ci-dessus, vous pouvez envisager d'utiliser des modèles de prototypes lorsque vous devez créer des objets similaires à plusieurs reprises. Par exemple, vous devez créer un objet dans un corps de boucle. Si le processus de création d'objets est plus compliqué ou si le nombre de cycles est nombreux, l'utilisation du mode prototype peut non seulement simplifier le processus de création, mais également améliorer beaucoup les performances globales du système.
La classe publique Prototype implémente clonable {private ArrayList list = new ArrayList (); Public Prototype Clone () {prototype prototype = null; essayez {prototype = (prototype) super.clone (); prototype.list = (arrayList) this.list.clone (); } catch (clonenotsupportEdException e) {e.printStackTrace (); } return prototype; }}Notes sur le mode prototype:
Étant donné que ArrayList n'est pas un type de base, la liste des variables des membres ne sera pas copiée et nous devons implémenter une copie profonde par nous-mêmes. Heureusement, la plupart des classes de conteneurs fournies par Java implémentent l'interface clonable. Il n'est donc pas particulièrement difficile d'atteindre une copie profonde.
PS: Dans la copie profonde et les problèmes de copie superficielle, une copie profonde se produira, y compris les types de base dans 8 Java et leurs types d'encapsulation, et il existe également des types de chaînes. Les autres sont des copies peu profondes.