一,单例模式
https://www.cnblogs.com/zhaoyan001/p/6365064.html
概念:
在某些特殊场合中,一个类对外提供且只提供一个对象时,这样的类叫做单例类,而设计单例的流程和思想叫做单例设计模式。—(单例模式能保证一个类仅有一个实例,并提供一个访问它的全局访问点,同时在类内部创造单一对象,通过设置权限,使类外部无法再创造对象。单例对象能保证在一个JVM中,该对象只有一个实例存在。)
实现步骤:
私有化构造方法,使用private关键字修饰。
•
声明本类类型的引用指向本类类型的对象,并使用private static关键字共
同修饰。
•
提供公有的get方法负责将对象返回出去,并使用public static关键字共同
(1)饿汉式
package Task_neuedu;
public class Singleton {
//单例模式,饿汉模式
public static Singleton s=new Singleton(); //定义一个实例化对象的变量
private Singleton(){ } //要达到单例的效果,必须让构造方法私有
public static Singleton getInstance(){
return s; //通过方法如实例化对象,指向的就是同一个实例
}
}
package Task_neuedu;
public class SingLetonTest {
public static void main(String[] args) {
Singleton s1=Singleton.getInstance(); //实例化对象s1
Singleton s2=Singleton.getInstance(); //实例化对象s2
System.out.println(s1==s2); //true,==比较的是地址,说明实例化指向的是同一个对象
}
}
(2)懒汉式
package Task_neuedu;
public class Singleton {
//单例模式,饿汉模式
public static Singleton s=null;
private Singleton(){ }
public static Singleton getInstance(){
if (s==null){ //判断是否为空,如果为空,则创建
s=new Singleton();
return s;
} //不为空,则直接返回
return s;
}
}
(3)双重检查法
解决了懒汉式的空间和效率问题,加锁的机制也好了很多
package Task_neuedu;
//双重检查!
public class Singleton2 {
//私有化构造方法
private Singleton2(){}
public static Singleton2 instance;
public static Singleton2 getInstance(){
if (instance==null){ //减少时间,提高效率
synchronized (Singleton2.class){ //加锁,使同时访问的用户按顺序实例化对象
if (instance==null) //再次检查instance是否为空,为了安全,
// 张三实例化过后,李四进去就不再实例化,实例化代码锁住,这个判断由此增加了安全性
instance=new Singleton2();
}
}
return instance ;
}
}