一、单例模式

作者: 城市里永远的学习者 | 来源:发表于2018-09-17 11:34 被阅读0次

    1.单例模式

    1.1定义:属于一种对象创建模式,能够确保系统中一个类有且只有一个实例

    1.2好处:

    1.2.1对于频繁使用的对象,可以省略创建对象所花费的时间

    1.2.2由于new的次数减少,对内存的使用频率也降低了,减去GC压力

    1.3角色

    单例类和使用类

    实例1:

    public class SingleClass3 {

    private  SingleClass3(){

    System.out.println("init SingleClass3...");

        }

    private  static  SingleClass3 instance=new SingleClass3();

        public synchronized static  SingleClass3 getInstance()

    {

    return  instance;

        }

    }

    假设类构造函数初始化时间较慢,则延迟加载:

    public class SingleClass {

    private static  SingleClass instance=null;

        private  SingleClass()

    {

    System.out.println("SingleClass Constructor ...");

        }

    public  static synchronized SingleClass getInstance()

    {

    if (instance==null)

    instance=new SingleClass();

                return instance;

        }

    }

    但因为使用了同步方法,所以在多线程情况下会变慢,虽然减少了类加载时间,但却因为同步方法导致时间变长,于是引入内部类:

    public class SingleClass2 {

    private  SingleClass2()

    {

    System.out.println("SingleClass2 Constructor ...");

        }

    private  static  class  SingleHolder{

    private  static SingleClass2 instance=new SingleClass2();

        }

    public  static  SingleClass2 getInstance()

    {

    return SingleHolder.instance;

        }

    }

    思考:

    如何理解使用内部类来实现单例模式?

    静态内部类只有在被调用时才会加载,且类的加载过程是线程保护的所以不存在线程安全问题。而且这个类的实例化是在静态内部类中且使用了final修饰,只能赋值一次,static修饰随着类的加载而加载

    使用:

    1.配置类

    2.常用注解

    @Configuration:指定为配置类

    @Component:

    @Aspect

    相关文章

      网友评论

        本文标题:一、单例模式

        本文链接:https://www.haomeiwen.com/subject/uhpknftx.html