什么是单例模式:一个类只允许产生一个实例化对象
特点:构造方法私有化,外部无法产生新的实例化对象,只能通过static方法取得对象实例化
首先构造方法私有化就外部无法产生新的实例化对象,所以就只能在类的内部进行实例化
private Singleton singleton=new Singleton();
但是此时singleton对象是一个普通的属性,所有的普通属性必须要在实例化对象的时候再能进行内存空间的分配,而现在外部是无法进行实例化对象的,所以必须想一个办法,可以在Singleton没有实例化对象产生的时 候,也可以将singleton进行使用。此时我们就应该想到用static关键字。(可以去了解一下static关键字的用法)
class Singleton
{
private static Singleton singleton=new Singleton();
//构造方法私有化
private Singleton(){ }
public void print()
{
System.out.println("hello world ");
}
}
以上虽然可以取得Singleton类的实例化对象,但是对于类中属性应该使用private进行封装,要想取得private属性, 应该提供getter()方法。由于此时访问的是static属性,并且这个类无法在外部提供实例化对象,因此应该提供一个 static的getter()方法
class Singleton
{
private static final Singleton singleton=new Singleton();
//构造方法私有化
private Singleton()
{}
public static Singleton getSingleton()
{
return singleton;
}
public void print()
{
System.out.println("hello world ");
}
}
以上是根据饿汉式单例模式的分析。
以下是俩种单例模式的代码:
饿汉式单例模式:一上来就直接实例化对象
class Singleton
{
private static final Singleton singleton=new Singleton();
//构造方法私有化
private Singleton()
{
}
public static Singleton getSingleton()
{
return singleton;
}
public void print()
{
System.out.println("hello world ");
}
}
public class 饿汉式 {
public static void main(String[] args) {
//static修饰的方法通过类名.方法名调用
Singleton singleton=Singleton.getSingleton();
singleton.print();
}
}
懒汉式单例模式:第一次使用Singleton对象的时候才会为其产生实例化对象的操作
class Singleton1
{
private static Singleton1 instannce;
//构造方法私有化
private Singleton1() { }
public static Singleton1 getSingleton()
{
if (instannce==null)
{
instannce=new Singleton1();
}
return instannce;
}
public void print()
{
System.out.println("hello world ");
}
}
public class 懒汉式 {
public static void main(String[] args) {
Singleton1 s=Singleton1.getSingleton();
s.print();
}
}