阅读背景:

[初级]设计模式--享元模式

来源:互联网 

/**
 * 享元模式
 * 
 * 如果程序中存在大批的对象,并且对象之间也较为相似
 * 这样,对象之间相似的部份便可以够同享出来,这样就减少了内存开消
 * 
 * 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;
		}
	}
}/**
 * 享元模式
 * 
 * 如果程序中存在大批的对象,并且对象之间也较为相似
 * 这样




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: