Maison  >  Article  >  Java  >  Poids mouche

Poids mouche

DDD
DDDoriginal
2024-09-18 21:46:09689parcourir

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

  • Efficacité de la mémoire : réduit l'utilisation de la mémoire en partageant des objets, en particulier lorsque l'état intrinsèque est grand ou qu'il y a de nombreux objets.
  • Amélioration des performances : en réduisant le nombre d'objets créés, cela peut améliorer les performances de l'application lors de la gestion d'un grand nombre d'objets.

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!

Déclaration:
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