设计模式:解决问题的一种行之有效的思想,用于解决特定环境下重复出现的特定问题的解决方案。
单例:在系统中某个类的对象只需要存在一个,以便节约资源和空间,只是单例是最好的解决方案。
下面写几个简单的单例,
懒汉式:没用到我我就不new对象,用到我的时候再在类模版里生成一个对象,一定程度上省了空间
public class Single {
private static Single s = null;//必须是静态的,下面的静态函数要用,同时也是把它存在类模版里
private Single(){//必须写成私有的,这样才能把new对象控制在自己手里
}
public synchronized static Single getInstace(){//给该方法加锁,否则在线程的时候容易出错
if(s==null){//如果s是空的,就new一个新的给使用类,否则就返回原来的
s = new Single();
}
return s;
}
}
饿汉式:一开始我就在类模版中生成这样一个对象,要用时就直接拿过去用,内存相对懒汉来说耗费多,但时间上要快
//饿汉式
public class Single2 {
private final static Single2 s = new Single2();//要定义成最终变量,以防止改动
private Single2(){
}
public static Single2 getInstance(){
return s;
}
}
单例再加上缓存(多例)
单例的变种,加上缓存,用MAP来存储对象,同时保证MAP的唯一性,还可按照情况控制MAP中对象的数量
public class AA {
private static Map<Integer, AA> map = new HashMap<Integer, AA>();
private static int count = 3;//控制缓存中实例的总数(该整数可以采用用户设置或读取配置文件的方式更改)
private static int num=1;//当前实例的序号---用num来当作内部维护的key
public static AA getInstance(){
AA a = map.get(num);
if(a==null){
a = new AA();
map.put(num, a);
}
num++;
if(num>count){//循环用
num=1;
}
return a;
}
}
private static Map<Integer, AA> map = new HashMap<Integer, AA>();
private static int count = 3;//控制缓存中实例的总数(该整数可以采用用户设置或读取配置文件的方式更改)
private static int num=1;//当前实例的序号---用num来当作内部维护的key
public static AA getInstance(){
AA a = map.get(num);
if(a==null){
a = new AA();
map.put(num, a);
}
num++;
if(num>count){//循环用
num=1;
}
return a;
}
}