单例模式(饿汉式与懒汉式)

1.什么是单例模式?

类的单例的设计模式,就是在定义某一个类时它只能有一个对象,并且这个类只提供一个取得对对象实例的方法

就好比说,在我们生活当中只能有一个女朋友。

但是呢,在我们创建的时候都不能说保证只能new一个对象

class A{
    public static void main(String[] args){
        B c =new B("张三");
        B C1 =new B("李四");
        //在这个时候我们发现可以new两个对象或者多个
    }
}
class B{
    String name;
    
    public B(String name){
        this.name = name;
    }
}

上面的代码的已经不满足单例模式只能存在了,那我们可以通过单例模式的常用两个模式来实现:饿汉式、懒汉式

1.1 饿汉式

饿汉式步骤分为这几种:

1.先将构造器私有化,这样可以让用户不能在外部随意new对象

2.在类的里面的属性中创建对象,既然我们构造器私有化了,那我们的外部就没办法new对象,所以说我们只能在类的里面创建对象了

3.向外面提供一个公共的静态方法,创建好对象后,如果说不对外部提供公共方法,我们仍然没办法使用这个被创建的对象

思路:既然说我们将构造器私有后就没办法new对象,那么我们是不是能通过类名加载来获取呢。然后我们通过static关键词来实现对外公共方法,因为这个方法需要返回创建对象,而静态方法只能使用静态变量,所以我们这得用static

代码如下

class A{
    public static void main(String[] args){
        //创建两个对象
        Teacher teacher01 = Teacher.getTeacher();
        Teacher teacher02 = Teacher.getTeacher();
        //输出两个对象,这儿会发现他们两个一样
        System.out.println(teacher01);
        System.out.println(teacher02);
        
    }
}
class Teacher{
    //这里我们new一个对象,因为不能让外面访问到所以得私有化,
    private static final Teacher TEACHER = new Teacher(); 
    
    private Teacher(){
    }
    
    public static Teacher getTheacher(){
        return TEACHER;
    } 
}

这儿会有个疑问,明明时两个对象为什么输出的一样呢,其实在我们在new对象的时候因为static静态代码他是只能运行一次的,所以我们根据这个特点将值给定死了,这儿后期会出

懒汉式

懒汉式的步骤分

为这几种:

1.同样将构造器私有化,让用户不能在外部随便new对象

2.在类中属性部分先声明对象但时不创建

3.向外部提供一个公共的静态方法,用来创建对象返回对象引用

思路:这里的思路跟饿汉式一摸一样,唯一不同的的,我们需要在提供公共方法里面创建对象,要在方法中创建同一个对象,声明对象为null,判断不是null,就直接返回上次创建的对象

class A{
    public static void main(String[] args){
       Students student01 = Students.grtStudents();
       Students student02 = Students.getStudents();
       System.out.println(student01);
       System.out.println(student02);

    }
}
class Students{
    private static Students ATUDENTS = null;
    
    private Students(){
        
    }
    public static Students getStudents(){
        if(STUDENTS==null){
            STUDENTS = new Students();
        }
        return STUDENTS;
    }
    
}

它们两个的区别在于创建对象的时机不同,饿汉式实在类加载的时候就创建了对象,线程安全。懒汉式在使用时创建,线程线程不安全。

而且饿汉式存在浪费资源的可能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值