GOF23的一些总结(十二)
2017-01-04 17:27
253 查看
享元模式:相同或者相似对象,内存中只存一份。极大的节约资源,提高系统性能。
为了节省内存,共享内部状态,分离出了外部状态。用时间换取了空间。
享元模式的几个类
棋子类欲实现的功能类
实现棋子的功能类
外部状态
享元池
测试类
为了节省内存,共享内部状态,分离出了外部状态。用时间换取了空间。
享元模式的几个类
棋子类欲实现的功能类
package com.baidu.co; /** * 棋子(享元模式) * * @author Administrator * */ public interface Chess { void setColor(String c); String getColor(); void display(Coordinate c); }
实现棋子的功能类
class ConcreateChess implements Chess{ private String color; public ConcreateChess(String color) { super(); this.color = color; } @Override public void setColor(String c) { this.color=c; } @Override public String getColor() { return color; } @Override public void display(Coordinate c) { System.out.println("棋子颜色:"+color); System.out.println("棋子位置:"+c.getX()+"---"+c.getY()); } }
外部状态
package com.baidu.co; /** * 坐标类 * @author Administrator * */ 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; } }
享元池
package com.baidu.co; import java.util.HashMap; import java.util.Map; /** * 享元工厂类 * @author Administrator * */ public class ChessFlyWeightFactory { //享元池 private static Map<String,Chess> map =new HashMap<String,Chess>(); public static Chess getChess(String color){ if(null!=map.get(color)){ return map.get(color); }else{ Chess che=new ConcreateChess(color); map.put(color, che); return che; } } }
测试类
package com.baidu.co; /** * 享元模式应用的场景 * 内存属于稀缺资源,不要随便浪费。如果有很多个相同的或相似的对象,我们通过享元模式,节省内存。 * 享元模式以共享的方式高效的支持大量细粒度对象的重用。 * 享元对象能做到共享的关键是区分了内部状态或外部状态。 * 内部状态:可以共享,不会随环境变化而改变。 * 外部状态:不可以共享,会随着环境变化而改变。 * @author Administrator */ public class Client { /** * @param args */ public static void main(String[] args) { Chess ch1=ChessFlyWeightFactory.getChess("black"); Chess ch2=ChessFlyWeightFactory.getChess("black"); Chess ch3=ChessFlyWeightFactory.getChess("black"); System.out.println(ch1); System.out.println(ch2); System.out.println(ch3); System.out.println("增加外部处理状态+++++"); ch1.display(new Coordinate(10,10)); ch2.display(new Coordinate(20,20)); ch3.display(new Coordinate(30,30)); } }
相关文章推荐
- 白话机器学习算法(十二)聚类,分类的一些总结
- GOF23的一些总结(二)
- 白话机器学习算法(十二)聚类,分类的一些总结
- GOF23的一些总结(二十一)
- GOF23的一些总结(三)
- GOF23的一些总结(九)
- GOF23的一些总结(八)
- GOF23的一些总结(十六)
- GOF23的一些总结(一)
- GOF23的一些总结(七)
- GOF23的一些总结(十四)
- GOF23的一些总结(六)
- GOF23的一些总结(十五)
- 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西
- GOF23的一些总结(四)
- GOF23的一些总结(十八)
- GOF23的一些总结(二十)
- GOF23的一些总结(十一)
- 总结一些经验(5)
- ASP.net中动态加载控件时一些问题的总结