Java设计模式(1)之单例模式学习总结

设计模式:一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结;

***********************************单例模式************************************
***********************单例模式分为懒汉模式和饿汉模式*****************************

一、单例模式Singleton

①应用场景:需要该类的一个实例对象;则该类的设计就可以采用单例模式进行设计;
②作用:保证整个应用程序有且只有该类的一个实例对象;
③分类:懒汉模式饿汉模式
懒汉模式设计示例:

    public class SingletonLazy{
        //将无参构造函数的访问属性设置为私有;
        //保证了外部不可以通过new调用构造函数进行对象的创建;
        //只能通过本类提供了全局访问接口getInstance()静态方法来获取实例对象
        private SingletonLazy(){

        }

        //将该类的一个对象变量声明为该类的静态域并且访问属性为私有;
        //保证了外部不可以通过该类调用该数据域,只能由本类的静态方法对其进行操作;
        private static SingltonLazy singleton;//默认初始值为null,懒汉模式

        //单例模式的单例实现的关键,提供静态方法getInstance实现外部获取该类的唯一实例变量;
        //方法访问属性必须为公有,保证外部可以通过类名调用该方法;
        //设置为静态方法,是因为外部无法自己创建对象实例,构造函数不可调用,所以只能通过这个类的静态方法提供实例;
        public static SingletonLazy getInstance()
        {
            if(singleton == null)
            {
                singleton = new SingletonLazy();
            }
            return singleton;
        }
    }

饿汉模式设计示例:

    public class SingletonHungry
    {
        //将无参构造函数的访问属性设置为私有,保证了外部不可以通过new关键字调用构造函数进行对象的创建;
        private SingletonHungry(){}

        //将该类的一个对象变量声明为该类的静态域并对其进行赋值,访问属性为私有,保证了外部不可以通过该类调用该数据域;
        private static SingletonHungry singleton = new SingletonHungry();//默认初始值为对象实例,饿汉模式

        //单例模式的单例实现的关键,提供该方法实现外部获取该类的唯一实例变量;该方法访问属性必须为公有,保证该类可以通过类名调用该方法;
        //设置为静态方法,是因为外部无法自己创建对象实例,构造函数不可调用,所以只能通过这个类的静态方法提供实例;
        public static SingletonHungry getInstance()
        {
            return singleton;
        }
    }

两种单例模式的区别:
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,因为在类加载时创建实例对象;线程安全,因为实例对象在调用getInstance()方法之前就已经创建完毕,所以多个线程并发调用getInstance()方法只会获取实例对象,而不会创建对象;
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,因为只有在使用该类的静态方法getInstance()时才创建实例;线程不安全,因为多个线程并发调用getInstance()方法时,可能会导致多次创建实例,造成不必要的内存浪费!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值