单例模式:饿汉模式+懒汉模式

什么是单例模式:一个类只允许产生一个实例化对象

特点:构造方法私有化,外部无法产生新的实例化对象,只能通过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();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40408443/article/details/121494146