利用数组实现缓存实例的不可变类

来源:互联网 发布:aes算法加密过程 编辑:程序博客网 时间:2024/05/23 00:10

        不可变类的实例从创建后就不能被改变,所以能方便得为多个对象所共享。如果程序大量访问不同的不可变类,则可以考虑缓存这个不可变类。重复的不可变类既消耗系统性能,又毫无意义,所以讲已经创建好的实例缓存起来是个不错的策略,缓存的实现方法有很多种,性能也各有不同,本篇介绍以数组作为缓存池来实现一个不可变类

        

class CacheImmutale{//缓存池大小private static int MAX_SIZE=5;//缓存池private static CacheImmutale[] caches=new CacheImmutale[MAX_SIZE];//缓存池下标private static int postAt=0;private final String whoAmI;public String getwhoAmI(){return whoAmI;}private CacheImmutale(String whoAmI){this.whoAmI=whoAmI;}//重写equals方法public boolean equals(Object obj){if(this==obj){return true;}if(obj!=null&&obj.getClass()==CacheImmutale.class){return whoAmI.equals(((CacheImmutale)obj).getwhoAmI());}return false;}//重写hashCodepublic int haseCode(){return whoAmI.hashCode();}//对外的建造实例方法public static CacheImmutale valueOf(String whoAmI){//遍历缓存池 有就返回for(int i=0;i<caches.length;i++){if(caches[i]!=null&&whoAmI.equals(caches[i].getwhoAmI())){return caches[i];}}//如果缓存池满了,则从0开始重新覆盖缓存池,实现先进先出if(postAt==MAX_SIZE){caches[0]=new CacheImmutale(whoAmI);postAt=1;}else{//缓存池没满则 把实例缓存进缓存池caches[postAt++]=new CacheImmutale(whoAmI);}//返回实例return caches[postAt-1];}}public class CacheImmutaleTest {public static void main(String[] args) {CacheImmutale ci1=CacheImmutale.valueOf("你是1");CacheImmutale ci2=CacheImmutale.valueOf("你是1");CacheImmutale ci3=CacheImmutale.valueOf("你是2");//true 返回同一个实例System.out.println(ci1==ci2);//false 返回不同实例System.out.println(ci1==ci3);}


0 0
原创粉丝点击