GOF23的一些总结(十二)
来源:互联网 发布:网络安全要学java么 编辑:程序博客网 时间:2024/06/08 14:09
享元模式:相同或者相似对象,内存中只存一份。极大的节约资源,提高系统性能。
为了节省内存,共享内部状态,分离出了外部状态。用时间换取了空间。
享元模式的几个类
棋子类欲实现的功能类
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)); } }
0 0
- GOF23的一些总结(十二)
- GOF23的一些总结(一)
- GOF23的一些总结(二)
- GOF23的一些总结(三)
- GOF23的一些总结(四)
- GOF23的一些总结(五)
- GOF23的一些总结(六)
- GOF23的一些总结(七)
- GOF23的一些总结(八)
- GOF23的一些总结(九)
- GOF23的一些总结(十)
- GOF23的一些总结(十一)
- GOF23的一些总结(十三)
- GOF23的一些总结(十四)
- GOF23的一些总结(十五)
- GOF23的一些总结(十六)
- GOF23的一些总结(十八)
- GOF23的一些总结(十九)
- Android Studio gradle学习推荐
- JSONP的优劣点
- Map 与 beanClass 互转
- ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)
- spark graphx 图计算demo,结果展现
- GOF23的一些总结(十二)
- EF进阶篇(一)——概述
- <sstream>输入流.输出流
- 2016年上学期程序设计实训报告3
- 点击通知栏启动程序
- Makefile中一些元素的代表含义
- 我们要学习的算法
- [置顶] Android实现应用的增量更新\升级 标签: 增量更新Androidbsdiffpatch增量升级 2016-01-25 16:01
- 【Android实战】----Android Studio2的安装使用