定义:运用共享技术有效地支持大量细粒度的对象。
使用场景:如果一个应用使用了大量的对象,而大量的对象造成了很大的存储开销时就应该考虑使用享元模式;还有就是对象的大多数状态是外部状态,如果删除外部状态,那么就可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
实现:定义享元工厂,包括共享对象集合,定义共享抽象类,定义共享类的外部状态类。实例化共享类时传入外部状态类
优点:大大减少对象的创建,降低系统的内存,使效率提高。
代码示例:五子棋游戏,棋子对象就可以使用享元模式,颜色为内部状态,棋子位置为外部状态,这样只需两个对象就可以完成。
import java.util.Hashtable;
public class PieceFactory { private Hashtable<String, Piece> pieces = new Hashtable<String, Piece>(); public Piece getPiece(String key) { if (!pieces.containsKey(key)) { pieces.put(key, new Piece(key)); } return pieces.get(key); } public int getPieceCount() { return pieces.size(); } }
public class Position { private int x; private int y;
public Position(int x, int y) { super(); this.x = x; this.y = y; }
@Override public String toString() { return "Position [x=" + x + ", y=" + y + "]"; } }
结果: