- /*
- 缓存实例的不可变类
- */
- public class CacheImmutale
- {
- private final String name;
- private static CacheImmutale[] cache = new CacheImmutale[10];
- //记录缓存实例在缓存中的位置,cache[pos-1]是最新缓存的实例
- private static int pos = 0;
- public CacheImmutale(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return name;
- }
- public static CacheImmutale valueOf(String name)
- {
- //遍历已缓存的对象
- for (int i = 0 ; i < pos;i++)
- {
- //如果已有相同的实例,直接返回该缓存的实例
- if(cache[i] != null && cache[i].getName().equals(name))
- {
- return cache[i];
- }
- //如果缓存池已满
- if(pos == 10)
- {
- //把缓存池的第一个对象覆盖
- cache[0] = new CacheImmutale(name);
- post = 1;
- return cache[0];
- }
- else
- {
- //把新创建的对象缓存起来,pos加1
- cache[pos++] = new CacheImmutale(name);
- return cache[pos - 1];
- }
- }
- public boolean equals(Object obj)
- {
- if(obj instanceof CancheImmutale)
- {
- CacheImmutale ci = (CacheImmutale)obj;
- if(name.equals(ci.getName()))
- {
- return true;
- }
- }
- return false;
- }
- public int hashCode()
- {
- return name.hashCode();
- }
- public static void main(String[] args)
- {
- CacheImmutale c1 = CacheImmutale.valueOf("hello");
- CacheImmutale c2 = CacheImmutale.valueOf("hello");
- System.out.println(c1 == c2);//true
- }
- }
- }
转载于:https://blog.51cto.com/chengxuyuan/1011510