在项目中,设计模式是一种编写代码时为了解决一系列问题所提出的模板,单例模式就是设计模式中简单的一种。单例模式是为了解决一个类只用创建一个对象的情况,比如在飞机大战中,玩家所操控的飞机就可以写作单例模式,MP3中音频播放中一次只能放一首歌也可以使用单例类。就比如下面使用static和final来实现一个类对应一个对象的操作:

public class student1 {
    public static final student1 std=new student1();
    private student1(){

    }
}

这种又称为饿汉模式,缺点在于当它创建时就会一直占用内存资源知道程序结束。那我们为了解决这个问题,就想出当我们要用时,在创建对象,加上判断就可以知道当前对象是否为空,但是如果只是加上if来判断会出现多线程并发时,都检测到对象为空,所以以及会创建出两个对象,所以我们要加上锁,但是如果是每次调用方法都要加锁也会太过占用内存,所以我们可以先通过if来筛选第一遍,判断是否加锁,然后再进行判断是否已经创建完成。这种单例模式也被称作懒汉模式:

private static student2 stu;
    private student2(){

    }
    public student2 getStu(){
        if(stu==null){
            synchronized(student2.class){
                if(stu==null){
                    stu=new student2();
                }
            }
        }
        return stu;
    }

这里的监视器监视的是class对象,每个类都会有唯一的一个class类的对象。最后我们还可以通过static的特点来实现单例。

在类的内部创建一个新的类,并且创建的这个是静态的,static的限制保证了无论使用了多少次外部类都保证指向的是同一个内部类,我再在内部类中创建一个静态的外部类对象,外部类的对象指向同一个内部类,内部类又只有一个外部类的对象,着就保证唯一对象的存在:

 private static class insideClass{
        static student3 stu=new student3();
    }
    private student3(){

    }
    public student3 getStu(){
        return insideClass.stu;
    }

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐