java设计模式——多例模式
2016-07-24 21:37
288 查看
★ 缓存在单例中的使用 缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通
常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。
说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。
代码如下:
★ 单例变形——多例模式 把上面缓存的单例实现,做成一个能够控制对象个数的共享空间,供整个应用程序使用。在
缓存中维护指定个数的对象,每个对象的key值由该类内部指定,有外部请求时直接返回其中一个对象出去。
说明:相当于维护一个指定数量的对象池,当请求个数超过控制的总数时,开始循环重复使用 。
代码如下:
常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放单例对象的类。
说明:该缓存中可以存放多个该类对象,每个对象以一个key值标识,key值相同时所访问的是同一个单例对象。
代码如下:
//缓存 import java.util.HashMap; import java.util.Map; //本例中,因为没有定义最大容量,所以"理论上"是可以无限制添加的,直至系统崩溃 public class Student { //定义用于缓存的容器 private static Map map = new HashMap(); /*本例中,Student类的构造方法不需要私有化, * 因为采用单例模式的是map * 而student是加到map中的 */ public static Student getInstance(String key){ //到缓存中查找key对应的对象 Student stu = map.get(key); if(stu==null){//若为空,则new一个并加到map中 stu = new Student(); map.put(key, stu); } return stu; } }
★ 单例变形——多例模式 把上面缓存的单例实现,做成一个能够控制对象个数的共享空间,供整个应用程序使用。在
缓存中维护指定个数的对象,每个对象的key值由该类内部指定,有外部请求时直接返回其中一个对象出去。
说明:相当于维护一个指定数量的对象池,当请求个数超过控制的总数时,开始循环重复使用 。
代码如下:
//单例的变种--多例 import java.util.HashMap; import java.util.Map; //本例中,count的值决定了缓存区的最大容量 public class Student_2 { private static Map map = new HashMap();//将缓存当作单例 private static int count=4;//缓存区的实例总数(该整数可以采用用户设置或读取配置文件的方式更改) private static int num=1;//当前实例(对象)的序号--用num来当作内部维护的key public static Student_2 getInstance(){ Student_2 stu = map.get(num); if(stu==null){ //若stu为空,则new一个出来并加到map中 stu = new Student_2(); map.put(num, stu); } num++;//序号不断变化,循环利用缓存区 if(num>count){ num=1;//重置当前实例的序号 } return stu; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树