编写享元类
编写一个工厂,在工厂里面定义hashMap类型的享元池,用get函数进行享元的生成
例子:Frame上文本框输入一个字符串,回车,出现以这个字符串为标题的Dialog ,但是,当你输入的一个字符串如果是以前出现过的,那么就不要新分配内存.
代码:
Word.java
package 享元模式;
public class Word {
private String key;
private String content;
public Word(String key, String content) {
super();
this.key = key;
this.content = content;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.key+":"+this.content;
}
}
package 享元模式;
import java.security.Policy;
import java.util.HashMap;
public class WordPool {
private static HashMap pool = new HashMap();
public static Word getWord(String key,String content){
Word word = (Word)pool.get(key);
if(word==null){
word = new Word(key, content);
pool.put(key, word);
}
return word;
}
}
Flyweight.java
package 享元模式;
import java.util.HashMap;
public class Flyweight {
public static void main(String[] args) {
Word w1 = WordPool.getWord("刘德华","001");
Word w2 = WordPool.getWord("张学友","002");
Word w3 = WordPool.getWord("刘德华","002");
Word w4 = WordPool.getWord("刘德华","004");
System.out.println(w4);
}
}
享元模式小结
享元模式的目的:避免大量拥有相同
内容的小类的开销(如耗费内存),使大
家共享一个类(元类)对象.
Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.
条件:享元多而小,并且会在以后经常使用,但是无法估计使用哪一个