/**
* 享元模式
*
* 如果程序中存在大批的对象,并且对象之间也较为相似
* 这样,对象之间相似的部份便可以够同享出来,这样就减少了内存开消
*
* 1、具体实体类(大批对象中可同享部份)
* 2、工厂类(同享池,返回已有对象或创立新对象)
* 3、外部状况(大批对象中可不同享部份)
*
* 长处:
* 1、节俭内存开消
* 缺陷:
* 1、增长了体系度
* 2、虽然节俭了内存,但增长了运行时长
*
* 场景:
* 1、五子棋
* 同享部份:色彩(黑、白)
* 分同享部份:地位(1...361)
* 2、String 常量池
*/
public class FlyWeightDemo01 {
public static void main(String[] args) {
IChess c1 = ChessFactory.getChess("黑");
IChess c2 = ChessFactory.getChess("黑");
IChess c3 = ChessFactory.getChess("红");
IChess c4 = ChessFactory.getChess("红");
IChess c5 = ChessFactory.getChess("黑");
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
c1.display(new Coordinate(10,10));
c2.display(new Coordinate(20,20));
c3.display(new Coordinate(30,30));
c4.display(new Coordinate(40,40));
c5.display(new Coordinate(50,50));
}
}
/**
* 棋子接口
*/
interface IChess{
void setColor(String color);
void display(Coordinate c);
}
/**
* 地位类
*/
class Coordinate{
int x,y;
public Coordinate(int x,int y){
this.x = x;
this.y = y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
/**
* 具体棋籽实现类
*/
class ConcreteChess implements IChess{
String color;
@Override
public void setColor(String color) {
this.color = color;
}
@Override
public void display(Coordinate c) {
System.out.println("棋子:["+this.color+"]["+c.getX()+"]["+c.getY()+"]");
}
}
/**
* 棋子工厂
*/
class ChessFactory{
private static Map<String,IChess> map = new Hashtable<String,IChess>();
public static IChess getChess(String color){
if( null!=map.get(color) ){
return map.get(color);
}else{
IChess c = new ConcreteChess();
c.setColor(color);
map.put(color, c);
return c;
}
}
}/**
* 享元模式
*
* 如果程序中存在大批的对象,并且对象之间也较为相似
* 这样