2016-10-02 3 views
0

Pour appliquer un modèle de masse volumique, nous devons diviser la propriété Objet en propriétés intrinsèques et extrinsèques. Les propriétés intrinsèques rendent l'objet unique alors que les propriétés extrinsèques sont définies par le code client et utilisées pour effectuer différentes opérations. Mais ma question est pourquoi ne pouvons-nous pas avoir à la fois une propriété intrinsèque et extrinsèque comme variable d'instance (voir Email classe ci-dessous) et créer un objet en boucle et définir les paramètres en boucle et envoyer plusieurs emails avec différents paramètres.Je ne vois aucune utilisation du modèle de poids mouche. Est-ce vraiment utile?

public class Test { 
    public static void main(String[] args) { 
     Email ob = new Email(); 
     for (int i = 0; i < 10; i++) { 
      ob.sender = String.valueOf(i); 
      ob.sendEmail(); 
     } 
    } 
} 

public class Email { 
    public String sender; 
    public void sendEmail() 
    { 
     System.out.println("Email sent to sender:"+sender); 
    } 
} 
+0

En effet Flyweight n'est pas un modèle, un travail pour économiser de la mémoire en Java. Il n'a rien à voir avec oop –

+0

@SupunWijerathne, flyweight est un modèle du livre canonique Design Patterns, _Elements of Reusable Object-Oriented Software_. Dire que ce n'est pas un modèle et n'a rien à voir avec la POO est un non-sens complet; et le modèle n'est pas spécifique à Java. Les modèles OOP du GoF sont agnostiques en langage. – jaco0646

+0

@ jaco0646 pas Java spécifique: oui, je serais d'accord avec cela avec une note. Mais cela n'a absolument rien à voir avec OO. Pourquoi dites-vous que c'est un non-sens? Alors qu'est-ce qu'il a avec OO? Un modèle de conception est quelque chose qui indique une solution à un problème, compte tenu des aspects structurels du logiciel. Si mouche est un modèle, je ne vois pas mal, si quelqu'un dit 'fusion-tri' est un modèle. aimerais voir ton idée. :)) –

Répondre

3

Parfois, les motifs ne sont pas évidents mais cela ne signifie pas qu'ils sont inutiles. Et je crains que vous ayez mal compris le motif de la mouche.

L'idée principale est de minimiser l'utilisation de la mémoire en partageant les mêmes objets qui ont déjà été utilisés auparavant. Habituellement, il existe en interne une structure de données chargée de conserver les valeurs et de les renvoyer selon certains critères. Il recherche l'élément déjà existant plutôt que d'en créer un nouveau.

En fait, c'est utile. Par exemple, JDK utilise ce modèle pour fournir le cache Integer (conserve une petite plage de valeurs pour les restituer efficacement) et le pool String (voir la méthode intern()).

+0

Parfois, je vois que les gens forcent à utiliser un motif. –

+0

@NikolasCharalambidis ... dans les cas où ils sont inutiles – Andrew

0

Tout ce que Flyweight raconte est 'Comment les objets immuables doivent être traités'.

  • Si un certain type d'objets sont immuables (je préfère en général tous les objets étant immuable dans la mesure du possible),
  • Et vous avez ce genre d'un objet créé dans l'application, avec un certain ensemble d'attributs, Ex : un immuablePerson objet est créé avec name = "John", age = 20
  • Et vous avez un autre objet exactement comme ça après un certain temps dans excecution d'application (name = "John", age = 20),
  • Il suffit d'utiliser celui créé précédemment, pas besoin de créer une autre (pas besoin pour s'inquiéter puisqu'il est immutable, les attributs ne changeront pas là après)

Ainsi c'est fondamentalement un travail autour d'épargner de la mémoire. Cela n'a rien à voir avec l'orientation de l'objet.