目的是共享内存中的某些对象资源
比如棋类游戏,每个棋子可以作为共享资源
public class Chess {
private int id;
private String text;
private Color color;
public Chess(int id, String text, Color color) {
this.id = id;
this.text = text;
this.color = color;
}
public static enum Color {
RED, BLACK;
}
}
public class ChessFactory {
private static final Map<Integer, Chess> PIECES = new HashMap<>();
static {
PIECES.put(1, new Chess(1, "将", Chess.Color.BLACK));
PIECES.put(2, new Chess(2, "将", Chess.Color.RED));
}
public static Chess get(int id) {
return PIECES.get(id);
}
}
我觉得这个模式用的不多,但某些场景非用不可。其实如果让某个程序员设计棋牌类游戏,就算他不知道有享元模式的存在,也会考虑把棋子这类可复用对象缓存起来。即使在最初没有这么设计,在压力测试或者生产内存持续暴涨的情况下,也会往这个方向优化。
查看全部 浅谈模式 - 汇总篇