设计模式是什么
对问题行之有效的解决方式,其实他是一种思想
单例设计模式
解决的问题,就是可以保证,一个类在内存中的对象唯一性
例如:必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性
如何保证对象唯一性
- 不允许其他程序用new创建该类对象
- 在该类创建一个本类实例
- 对外提供一个方法让其他程序可以获取该对象
步骤
- 私有化该类的构造函数(不能在别的类初始化就不能new该类对象)
- 通过new在本类中创建一个本类对象
- 定义一个公有的方法,将创建的对象返回
饿汉式
class Single{
private static final Single s = new Single();
private Single(){
}
public static Single getInstance(){
return s;
}
}
懒汉式
class Single2{
private static Single2 s = null;
private Single(){}
public static Single2 getInstance(){
if(s == null)
s = new Single();
return s;
}
}
这两种的区别
第一种类加载已经存在了,第二中,类加载进来还没有对象,只有调用了getInstance方法时,才会创建对象
懒汉式会出现一些问题,被多线程访问时,不能保证对象的唯一性
class Single2{
private static Single2 s = null;
private Single(){}
public static synchronized Single2 getInstance(){
if(s == null)
s = new Single();
return s;
}
}
这种用同步函数的方式效率低
class Single2{
private static Single2 s = null;
private Single(){}
public static Single2 getInstance(){
if(s == null)
{
synchronized(Single2.class)
{
if(s == null)
s = new Single();
}
return s;
}
}
}
用同步代码块的方式写,因为是静态函数没有this,所以用类名+class的方式给出对象,