一个系统中,如果有很多一样的对象,就会浪费内存。享元模式即共享相同的对象,比如一台打印机打印时需根据用户要求使用不同字体,如果在print函数里面实例化字体,就会创建很多相同的字体,浪费资源。
import java.util.HashMap;
import java.util.Map;
abstract class Font{
public abstract void print(String str);
}
class FontA extends Font{
@Override
public void print(String str) {
System.out.println("A字体的[" + str + "]");
}
}
class FontB extends Font{
@Override
public void print(String str) {
System.out.println("B字体的[" + str + "]");
}
}
class FontFactory{
private Map<String, Font> fonts = new HashMap<String, Font>();
private Font createFontByName(String name){
if("A".equals(name)){
return new FontA();
} else {
return new FontB();
}
}
public Font getFontByName(String name){
if(fonts.containsKey(name)){
return (Font)fonts.get(name);
} else {
Font res = createFontByName(name);
fonts.put(name, res);
return res;
}
}
}
class Printer {
FontFactory fontFactory = new FontFactory();
public void print(String str, String fontName){
Font font = fontFactory.getFontByName(fontName);
font.print(str);
}
}
public class Main{
public static void main(String[] args){
Printer printer = new Printer();
printer.print("abc", "A");
printer.print("abc", "A");
printer.print("abc", "B");
printer.print("abc", "B");
}
}