1.单例模式中类中只有一个实例
2.这个实例要自己创建
3.单例模式有两种写法:懒汉式、恶汉式
5.在写懒汉式,要注意会出现线程问题。
以下代码体现恶汉式写法
这个类是一个恶汉式单例
class Single
{
private static Single s = new Single();
//构造私有化
private Single(){}
//提供全局静态方法
public static Single getInstance()
{
return s;
}
}
这个类是执行类
class SingleDemo
{
public static void main(String[] args)
{
Single s = Single.getInstance();
System.out.println("s="+s);
}
}
以下代码体现懒汉式写法
这个类是一个懒汉式单例,不过在多线程会出现并发访问问题,解决方法是进行加锁synchronized关键子。
同时,为了解决效率问题,减少判断锁的次数,可以通过双重判断的方式。
//延时加载,懒汉式
class Single
{
//1、私有本类构造方法
private Single2(){}
//2、创建本类对象
private static Single2 instance = null;
//3、对外提供访问本类对象的功能
public static Single2 getInstance()
{
if( instance == null )
{
synchronized(Single.class)
{
if(instance == null) {
//如果不加锁,这里有多线程安全问题
instance = new Single();
}
}
}
return instance;
}
}
这个类是执行类
class SingleDemo
{
public static void main(String[] args)
{
Single s = Single.getInstance();
System.out.println("s="+s);
}
}
总结:
1.静态不能实现接口
2.单例可以被延迟初始化,静态在第一次加载是初始化,可以提升性能。
3.可以被继承,方法可以重写