享元

享元

轻量化 相同的对象 功能 减少内存消耗

例如:棋子 大小 颜色

public interface ChessFlyWeight {
   void setColor(String c);
   String getColor();
   void display(Coordinate c);
}


class ConcreteChess implements ChessFlyWeight {

   private String color;
   
   public ConcreteChess(String color) {
      super();
      this.color = color;
   }

   @Override
   public void display(Coordinate c) {
      System.out.println("棋子颜色:"+color);
      System.out.println("棋子位置:"+c.getX()+"----"+c.getY());
   }

   @Override
   public String getColor() {
      return color;
   }

   @Override
   public void setColor(String c) {
      this.color = c;
   }
   
}
public class ChessFlyWeightFactory {
   //享元池
   private static Map<String,ChessFlyWeight> map = new HashMap<String, ChessFlyWeight>();
   
   public static ChessFlyWeight  getChess(String color){
      
      if(map.get(color)!=null){
         return map.get(color);
      }else{
         ChessFlyWeight cfw = new ConcreteChess(color);
         map.put(color, cfw);
         return cfw;
      }
      
   }
   
   
}
public class Coordinate {
   private int x,y;

   public Coordinate(int x, int y) {
      super();
      this.x = x;
      this.y = y;
   }

   public int getX() {
      return x;
   }

   public void setX(int x) {
      this.x = x;
   }

   public int getY() {
      return y;
   }

   public void setY(int y) {
      this.y = y;
   }
   
}
public class Client {
   public static void main(String[] args) {
      ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色");
      ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("黑色");
      System.out.println(chess1);
      System.out.println(chess2);
      
      System.out.println("增加外部状态的处理===========");
      chess1.display(new Coordinate(10, 10));
      chess2.display(new Coordinate(20, 20));
      
      
   }
}
posted @ 2020-11-12 23:08  z_先生  阅读(80)  评论(0编辑  收藏  举报