Maison >Java >javaDidacticiel >Poids mouche
L'un des modèles structurels vise à réduire l'utilisation de la mémoire en partageant autant de données que possible avec des objets similaires.
C'est particulièrement utile lorsqu'il s'agit d'un grand nombre d'objets similaires, où créer une nouvelle instance pour chaque objet serait coûteux en termes de consommation de mémoire.
notions clés :
État intrinsèque : l'état partagé entre plusieurs objets est indépendant du contexte et reste le même pour différents objets.
État extrinsèque : état unique à chaque objet et transmis par le client. Cet état peut varier et n'est pas stocké dans l'objet Poids mouche
Principaux participants :
Poids mouche : Interface permettant à l'objet Poids mouche de recevoir l'état extrinsèque et de l'utiliser.
ConcretePoids mouche : implémente le Poids mouche et stocke l'état intrinsèque.
Poids moucheFactory : Gère les objets Poids mouche et assure le partage des interfaces, il renvoie un Poids mouche existant s'il existe déjà.
Client (comme la classe Main) : conserve une référence à Poids mouche et fournit l'état extrinsèque lorsqu'il doit interagir avec l'objet Poids mouche.
Prenons un exemple d'objet de caractère Poids mouche
Supposons que nous ayons un éditeur de texte qui doit restituer une grande quantité de texte. Chaque personnage peut être représenté comme un objet, mais avoir un objet distinct pour chaque personnage gaspillerait beaucoup de mémoire. Au lieu de cela, nous pouvons utiliser Poids mouches pour partager les objets de caractère qui représentent chaque lettre et stocker l'état extrinsèque comme la position ou le formatage à l'extérieur
Poids mouche
public interface Poids mouche { public void display(int x, int y);//x, y are the extrinsic state of the Poids mouche object }
Poids mouche en béton
public class CharacterPoids mouche implements Poids mouche { private char ch; public CharacterPoids mouche(char c){ this.ch = c; } @Override public void display(int x ,int y){ System.out.println("[drawing character: "+this.ch+" at co-ordinates:("+x+","+y+")]"); } }
Usine de poids mouche
public class Poids moucheFactory { private static HashMap<character mouche> flyweights = new HashMap(); public static Poids mouche getPoids mouche(char c){ Poids mouche flyweight = flyweights.getOrDefault(c,null); if(null==flyweight){ flyweight = new CharacterPoids mouche(c); flyweights.put(c,flyweight); } return flyweight; } } </character>
Principal
public class Main { public static void main(String args[]){ Poids mouche flyweight1 = Poids moucheFactory.getPoids mouche('a'); Poids mouche flyweight2 = Poids moucheFactory.getPoids mouche('b'); Poids mouche flyweight3 = Poids moucheFactory.getPoids mouche('a');// will use the same object that is referenced by flyweight1 flyweight1.display(1, 2);//'a' displayed at 1,2 flyweight2.display(3, 4);//'b' displayed at 3,4 flyweight3.display(5, 7); // 'a'(shared) displayed at 5,7 } }
Sortie :
[drawing character: a at co-ordinates:(1,2)] [drawing character: b at co-ordinates:(3,4)] [drawing character: a at co-ordinates:(5,7)]
Points clés
Inconvénients
Complexité : Le modèle peut ajouter de la complexité au code, notamment dans la gestion séparée des états extrinsèques et intrinsèques.
Surcharge : s'il y a peu d'objets à partager, le modèle Poids mouche peut introduire une complexité inutile sans économiser de mémoire significative.
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!