package flyweight;
/***
* 享元类
* @author zw
*
*/
public interface ChessFlyWeight {
void setColor(String color);
String getColor();
void display(Coordinate c);
}
class ConcreteChess implements ChessFlyWeight{
private String color;
public ConcreteChess(String color) {
super();
this.color = color;
}
@Override
public void setColor(String color) {
this.color = color;
}
@Override
public String getColor() {
// TODO Auto-generated method stub
return color;
}
@Override
public void display(Coordinate c) {
System.out.println("棋子颜色:"+this.color);
System.out.println("棋子位置:("+c.getX()+","+c.getY()+")");
}
}
package flyweight;
/***
* 外部状态
*
* 棋子的位置
* @author zw
*
*/
public class Coordinate {
private double x,y;
public Coordinate(double x, double y) {
super();
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public Coordinate() {
super();
}
}
package flyweight;
import java.util.HashMap;
import java.util.Map;
/***
* 享元工厂
* @author zw
*
*/
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;
}
}
}
package flyweight;
public class Client {
public static void main(String[] args) {
ChessFlyWeight cf1 = ChessFlyWeightFactory.getChess("黑色");
ChessFlyWeight cf2 = ChessFlyWeightFactory.getChess("白色");
ChessFlyWeight cf3 = ChessFlyWeightFactory.getChess("白色");
System.out.println(cf1);
System.out.println(cf2);
System.out.println(cf3);
System.out.println("增加外部状态处理########");
cf1.display(new Coordinate(10,10));
cf2.display(new Coordinate(20,10));
}
}