在某些特殊场合中一个类对外提供了一个对象且只能是一个对象,这样的类叫做单例类,编写单例类的设计思想叫做单例设计模式。
如例:
自定义Singleton类,实现该类的封装;
自定义TestSingleton类,在main方法中能得到且只能得到Singleton类中的一个对象;
public class Singleton{
//2.提供本类的引用作为本类的成员变量
private
//static 表示提升为类的层次
private static Singleton sin = new Singleton(); //饿汉式
//private static Singleton sin = null; //懒汉式
//1.自定义无参的构造方法,使用private关键字修饰
//static关键字不能修饰构造方法,加上static隶属于类层级,就不能访问非静态的成员了
private /*static*/ Singleton(){
}
//3.提供公有的get成员变量方法将成员变量返回出去
public static Singleton getInstance(){
return sin;
//if(sin == null){ //懒汉式 返回时才创建
// sin = new Singleton();
//}
//return sin;
}
}
public class TestSingleton{
public static void main(String[] args){
//Singleton s1 = new Singleton();
//Singleton s2 = new Singleton();
//System.out.println(s1 == s2); //false 得到Singleton类中的两个对象
//因为每次new等于重新开辟内存空间
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2); //true 等于每次调用的都是Singleton下的成员方法getInstance,返回的是同一个对象,开辟的是同一块内存空间
}
}
单例设计模式编写流程:
第一步:编写一个私有化的无参构造方法,使用private关键件修饰
第二步:提供本类类型的对象作为本类的成员变量,并使用private static共同修饰;
第三步:提供共有的静态(static)get成员变量将用于对象返回出去。
单例模式主要分饿汉式和懒汉式;
饿汉式表示一开始就是创建一个对象,懒汉式是直到返回时才创建对象。