java二十三种设计模式----(二)单例设计模式 :“懒汉式”与“饿汉式”的区别 为什么通常使用饿汉式

来源:互联网 发布:淘宝店铺名字测试打分 编辑:程序博客网 时间:2024/05/22 00:15

首先说下单例设计模式

单例模式:保证整个应用中某个实例有且只有一个。


有些对象我们只需要一个,
比如:配置文件,工具类,线程池,缓存,日志对象等。
如果创造出多个实例,就会导致许多问题,不如占用过多资源,不一致的结果等,

应用场合:有些对象只需要一个就足够了,如古代皇帝
作用:保证整个应用程序中某个实例有且只有一个。
类型:饿汉式,懒汉式。


下面用代码简单介绍下饿汉式和懒汉式

饿汉式

package 单例设计模式;//饿汉式:public class Singleton {//1,将构造方法私有化,不允许外部直接创建对象。private Singleton(){}//2,创建类的唯一实例,使用private static 修饰 private static Singleton instance=new Singleton();//一加载类就创建对象(实例)//3,提供一个用于获取实例的方法,使用public static修饰。public static Singleton getInstance(){return instance;}}

懒汉式

package 单例设计模式;//懒汉式public class Singleton2 {//1,将构造方法私有化,不允许外部直接创建对象。private Singleton2(){}//2,声明类的唯一实例,使用private static修饰。private static Singleton2 instance;//3,提供一个用于获取实例的方法,使用public static修饰。public static Singleton2 getInstance(){if(instance==null){instance=new Singleton2();}return instance;}}



饿汉式和懒汉式的区别

 所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间不同。  
 懒汉式:是在你真正用到的时候才去建这个单例对象:(用时才创建)
 饿汉式:是在不管你用的用不上,一开始就建立这个单例对象 (用不用都先创建)


一:区别 
饿汉式:
1,特点:饿汉式加载类时比较慢,但运行时获取对象的速度比较快。
                    在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变
2,线程安全:线程安全
 
懒汉式
1,特点:懒汉式加载类时比较快,但运行时获取对象的速度比较慢
2,线程安全:线程不安全。
 
 
二:优缺点对比
懒汉式
优点是延时加载实例(对象)、 是在需要的时候才创建对象。缺点是应该用同步。
如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
 饿汉式
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变  

         
推荐使用饿汉式
 
    
   

0 0
原创粉丝点击