一、概述
享元模式:如想让某一个类的一个实例能用来提供许多“虚拟实例“,就使用享元模式
二、情景
当我们要求输入一串英文时,可以声明一个字符工厂类,这样可以维护英文字符,以此来避免产生重复对象。
三、代码
1.字母工厂类
public class LetterFactory {
private HashMap
letters = new HashMap<>();
public String getLetter(Letter letter) {
Letter l = letters.get(letter.getKey());
if (l == null) {
l = letter;
letters.put(letter.getKey(), letter);
}
return l.getValue();
}
public int geSize(){
return letters.keySet().size();
}
}
2.字母类
public class Letter {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Letter(String key, String value) {
super();
this.key = key;
this.value = value;
}
}
3.测试类
public class Test {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
LetterFactory factory = new LetterFactory();
buffer.append(factory.getLetter(new Letter("a", "A")));
buffer.append(factory.getLetter(new Letter("a", "A")));
buffer.append(factory.getLetter(new Letter("a", "A")));
System.out.println(buffer.toString());
System.out.println(factory.geSize());
}
}