设计模式-23.享元模式

mac2024-10-24  59

定义:运用共享技术有效地支持大量细粒度的对象。

使用场景:如果一个应用使用了大量的对象,而大量的对象造成了很大的存储开销时就应该考虑使用享元模式;还有就是对象的大多数状态是外部状态,如果删除外部状态,那么就可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

实现:定义享元工厂,包括共享对象集合,定义共享抽象类,定义共享类的外部状态类。实例化共享类时传入外部状态类

优点:大大减少对象的创建,降低系统的内存,使效率提高。

代码示例:五子棋游戏,棋子对象就可以使用享元模式,颜色为内部状态,棋子位置为外部状态,这样只需两个对象就可以完成。

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 + "]";     }           }

结果:

最新回复(0)