代码实现
1 /**享元工厂类
2 * 享元工厂类
3 * @author bzhx
4 * 2017年3月14日
5 */
6 public class ChessFlyWeightFactory {
7 //享元池
8 private static Map<String,ChessFlyWeight> map = new HashMap<String,ChessFlyWeight>();
9 public static ChessFlyWeight getChess(String color){
10 if(map.get(color)!=null){
11 return map.get(color);
12 }else{
13 ChessFlyWeight cfw = new ConcreteChess(color);
14 map.put(color, cfw);
15 return cfw;
16 }
17 }
18 }
1 public interface ChessFlyWeight {抽象享元类
2
3 void setColor(String c);
4 String getColor();
5 void display(Coordinate c);
6 }
1 //内部状态ConcreteFlyWeight具体享元类(内部共享)
2 class ConcreteChess implements ChessFlyWeight{
3
4 private String color;
5
6 public ConcreteChess(String color) {
7 super();
8 this.color = color;
9 }
10
11 @Override
12 public void setColor(String c) {
13 this.color = c;
14 }
15
16 @Override
17 public String getColor() {
18 return color;
19 }
20
21 @Override
22 public void display(Coordinate c) {
23 System.out.println("棋子颜色:"+color);
24 System.out.println("棋子位置:"+c.getX()+"-----"+c.getY());
25 }
26
27 }
1 /**非共享享元类
2 * 外部状态 UnSharedConcreteFlyWeight
3 * @author bzhx
4 * 2017年3月14日
5 */
6 public class Coordinate {
7
8 private int x,y;
9
10 public Coordinate(int x, int y) {
11 super();
12 this.x = x;
13 this.y = y;
14 }
15
16 public int getX() {
17 return x;
18 }
19
20 public void setX(int x) {
21 this.x = x;
22 }
23
24 public int getY() {
25 return y;
26 }
27
28 public void setY(int y) {
29 this.y = y;
30 }
31
32
33
34 }
1 public class Client {测试调用
2
3 public static void main(String[] args) {
4 ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色");
5 ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("黑色");
6 System.out.println(chess1);
7 System.out.println(chess2);
8
9 System.out.println("增加外部状态的处理============================");
10 chess1.display(new Coordinate(10,10));
11 chess2.display(new Coordinate(20,20));
12 }
13
14 }