Flyweight Pattern Réutiliser sans plusieurs instances pour être compatible avec la mémoire
Cette page décrit les éléments suivants ・ Configuration de base de Flyweight ·La mise en oeuvre
classe | Explication |
---|---|
factory.class | sam.Ne dupliquez pas les instances de classe |
sam.class | Classe cible pour laquelle l'utilisateur crée une instance |
user(Main.class) | factory.sam via la classe.Créer une instance de classe |
Structure de base de factory.class et sam.class
factory.class
class factory{
Map map;
sam getSam(){}
}
En usine, l'instance sam () générée est conservée dans Map Gérez pour éviter la duplication
sam.class
class sam{
String s;
sam(){}
}
sam () enregistre String s dans le constructeur
Mettre en œuvre la structure de base ci-dessous
factory.class
class factory{
Map map = new HashMap(); // sam()Stocker l'instance
sam getSam(String key){
sam s = (sam) map.get(key); //Obtenir une instance de la carte
if(s != null){return s;} //S'il y a une instance dans la carte, transmettez-la à l'utilisateur
sam sm= new sam(key); //S'il n'y a pas d'instance dans la carte, créez une instance
map.put(key,sm); //Après avoir créé une nouvelle instance, enregistrez-la dans la carte
return sm; //Publier une instance pour l'utilisateur
}
}
sam.class
class sam{
String s;
sam(String s){}
}
Il y a un problème avec le code ci-dessus. La fabrique possède une carte et gère l'instance sam (). Lorsque l'usine elle-même est transformée en plusieurs interfaces, différentes cartes seront créées par ce numéro.
Ensuite, vous ne pouvez pas gérer correctement l'instance sam () Alors réglons factory.class sur singleton (Il ne peut pas empêcher la duplication de Map par lui-même, mais pour le moment, en tant que processus)
Implémentez également une méthode print () qui imprime le contenu de la carte pour une vérification plus approfondie
factory.class
class factory{Map map = new HashMap();
private static final factory fac = new factory();
private factory(){}
static factory getInstance(){
return fac;
}
sam getSam(String key){
sam s = (sam) map.get(key);
if( s != null){return s;}
sam sm = new sam(key);
map.put(key,sm);
return sm;
}
void print(){
Iterator it = map.keySet().iterator();
while(it.hasNext()){
sam s = (sam) map.get(it.next());
System.out.println(s+":"+s.get());
}
}
}
sam.class
class sam{
private String s;
sam(String s){this.s=s;}
String get(){return this.s;}
}
user(Main.class)
public static void main(String[] args){
factory f = factory.getInstance();
f.getSam("a");
f.getSam("b");
f.getSam("c");
f.getSam("a");
f.print();
}}
Recommended Posts