关闭

Java学习Gof23之创建者模式第2篇

130人阅读 评论(0) 收藏 举报
分类:

昨天学习了一下饿汉,和懒汉这俩个模式大致的代码是看懂了,不过里面的思想还是有点疑惑的,什么时候使用哪一个,我还是有点蒙蔽的。

先复习一下吧,饿汉就是类初始化的时候就立刻加载的,private static SingleDemo instance=new SingleDemo(); 然后构造器私有化,接着用一个静态方法返回这个对象。

懒汉就是比较懒啦,一开始对象不会初始化的,就是默认为null的,只有当你调用下面的返回实例的方法的时候它首先会判断这个对象是否为空,空的话就会new 一个这样的对象‘

不然的话直接返回这个对象。返回的方法前面肯定要加一个synchronized 因为不加同步的话就会造成多个多个对象的创建,这个肯定是一个延迟加载和线程安全的啦!

饿汉和懒汉的区别就是是否延迟加载吧,还有一个就是调用效率的问题,懒汉的话是加了同步的调用效率肯低啦,饿汉反之就高啦!

好了接下来学习一下剩下的三个模式吧

首先是那个双重检测锁这个据说用的时候有问题,就稍微提一下吧,它就是将同步写在方法的内部。就是这样调用效率就高啦,有缺点的东西就不需要深入了解了。

让我们来看一下静态内部内的方式吧上代码:

public class singleDemo{  
//静态的私有内部类的创建  
private static class  GetSingleDemo{  
public static final  singleDemo instance=new singleDemo();
}  

//构造器私有化  
private singleDemo(){  
}  

//获取实例  
public static SingleDemo getInstance(){  
return Get singleDemo.instance;  
}  
}  



一开始静态内部内少加了一个static ,静态静态啦,不能少了static的啦!还有一个方法是静态的话这个内部内也必须是静态的,成员我就不清楚了。

发现一个规律,无论是饿汉,懒汉,还是静态内部类,前面的俩个属性都是私有的,只有最后一个方法的访问时public .其实java很多内部代码都是不能直接创建对象的,可能他的内部就是很多内部类,饿汉,懒汉的方式,来实现对象的创建的,java核心技术上面有很多的,我记得有一个clone的,忘了,得去翻翻书了,记性不好,看过的东西一会就忘了。

这个内部类实现的方式的就是中和了饿汉,懒汉的有时,延迟加载,线程安全,调用效率高,lazy load.

最后谈谈那个枚举代码很简洁直接写了

public enum singleDemo{

instance;//本身就是一个单列就是这么简单 。直接调用

public  void operate(){

//具体操作

}

}

就是这么多,枚举的优势就是天然的,无污染的,是jvm底层提供保障的,人家可是有后台的,据说还有可以防止反射和反序列化的漏洞,都知道反射可以调用私有的构造器的,序列化这方面我还不怎么了解,以后再看吧。

缺点就是无延迟加载,天然的当然啦!


今天就写这么多了,晚安!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4834次
    • 积分:200
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类