Mode de poids mouche: grâce à la technologie de partage, il peut efficacement prendre en charge un grand nombre d'objets à grain fin.
Le mode PROFY Yuan est divisé en mode SIMPLE PROFIER YUAN ET MODE PROFIER YUAN EN MODE DE YAN HONG EN "Java and Mode" de Yan Hong. Le composite profite du yuan en mode composite ne peut pas être partagé. La clé pour partager l'objet de Yuan Greve est de distinguer les états internes et externes. Ces deux "congrusnts" sont trop difficiles à comprendre. Je ne dis pas que la traduction n'est pas bonne, mais peut-être que ma capacité de compréhension est mauvaise, ou que la version de traduction des "éléments de modèle de conception du logiciel orienté objet réutilisable" est traduit en objets internes et externes. Il est relativement simple et se sent mal à l'odeur littéraire des choses conceptuelles qui sont trop fortes. Les caractères ici utilisent également l'énoncé "bases du modèle de logiciel orienté objet réutilisable", qui ne fait pas de distinction entre les modes simples et les modes composites, mais a un poids de la forme de conception non partagée (en "java et mode", il indique que la jouissance composite ne peut pas être partagée). Nous disons ici qu'il ne peut pas partager des rôles de plaisir. De cette façon, les personnages du mode de plaisir incluent:
Le diagramme institutionnel de la classe du modèle de Xiangyuan est le suivant:
Lorsque vous utilisez le modèle d'encyclopédie dans Java.lang.String Design, nous savons que les chaînes en Java sont toujours partagées, comme l'extrait de code suivant:
Chaîne m = "a"; chaîne n = "a"; System.out.println (m == n);
Cela sortira True, indiquant que M et N indiquent la même instance, et il n'y a qu'un seul "A" en mémoire. C'est ainsi que le mode de plaisir Yuan est utilisé sur la chaîne.
L'utilisation du mode Xiangyuan dans le processus d'édition et de stockage de texte. Ici, on suppose que l'article est composé d'objets linéaires et que les objets linéaires sont composés de plusieurs objets de caractère. Cependant, si chaque personnage enregistre son propre objet, alors un post a des milliers d'objets de caractère, qui consomme sérieusement la mémoire du système et provoque une surcharge d'exécution inacceptable. La bonne méthode consiste à utiliser le mode Xiangyuan pour enregistrer uniquement les valeurs de codage des caractères ASCII, en tant qu'état inchangé interne, partager les objets de caractère et des données formatées telles que la couleur et la taille relatives des caractères sont maintenues par le client et peuvent être transmises de l'extérieur pendant l'exécution. Chaque ligne est un objet universel non partagé, qui est composé d'un objet universel (objet de caractère).
Jetons un coup d'œil à un exemple de structure simple du motif de l'encyclopédie:
/ ** * Lettre * / lettre publique Lettre {nom de chaîne privée; lettre publique (nom de chaîne) {this.name = name; } public String getName () {Nom de retour; }} / ** * Une usine de Xiangyuan (usine de singleton) qui génère des objets de lettre * / classe publique LetterFactory {map privé <chaîne, lettre> map; instance de LetterFactory statique privée = new LetterFactory (); private LetterFactory () {map = new hashmap <string, lettre> (); } public static LetterFactory getInstance () {return instance; } public void add (lettre lettre) {if (lettre! = null &&! map.containsKey (lettre.getName ())) {map.put (Letter.getName (), lettre); } System.out.println ("map.size ====" + map.size ()); } public lettre get (String name) {return map.get (name); }} Classe publique Test {public static void main (String [] args) {LetterFactory Factory = LetterFactory.getInstance (); String word = "Eassiness"; addLetterByName (usine, mot); Getletter (usine, mot); } // Ajouter un objet de lettre statique void addLetterByName (factory Letterfactory, word de chaîne) {for (char c: word.tocharArray ()) {factory.add (new Letter (c + "")); }} // objet de sortie d'objet statique void getletter (LetterFactory Factory, String word) {for (char c: word.tocharArray ()) {System.out.println (factory.get (c + "")); }}}Imprimer:
Map.Size ==== 1 Map.Size ==== 2 Map.Size ==== 2 Map.Size ===== 3 Map.Size ==== 4 Map.Size ==== 5 Map.Size ===== 5 FlyweTter@3343c8b3 Flyweight. flyweight.letter@1aa8c488 flyweight.letter@3dfeca64 flyweight.letter@22998b08 flyweight.letter@1aa8c488