其实很久以前就翻过(不敢用看过)GOF的黑皮书,只是……看不明白,一头雾水地弃了,现在想想,应该是那时候代码量太少了,对设计模式带来的好处没有切实的体会,所以看不下去。So,现在开始,把早就应该做的事做完的事完成。Mark一本棒棒哒设计模式入门读物,《大话设计模式》,最近看得很带劲。
闲话少说,开启 单例模式
一些时候,对于某个类,我们需要保证整个系统中只有它的一个实例(为了节约资源,或者数据共享一类的原因),那怎样确保不会出现多个实例呢,这就涉及到了 :单例模式
对象是类的构造器创建的,如果构造器谁都可以调用,肯定没法实现“单例”,因此,很自然的想到重写构造方法,将其私有化,然后,把创建实例的操作在类的私有方法中实现(只执行一次),最后定义一个公有的方法,返回该实例,于是就有了如下的代码(饿汉模式):
<span style="font-size:18px;">public class Instance {
// 私有构造方法
private Instance() {
};
// 构建唯一实例
private static Instance in = new Instance();
// 获取实例的方法
public static Instance getInstance() {
return in;
}
}
</span>
但考虑到一开始就创建类并不完全符合实际,在第一次需要使用实例的时候创建才是更常见的情况,便有了如下的变化,(坊间称为懒汉模式)
<span style="font-size:18px;"> private static Instance in;
public static Instance getInstance(){
if(in==null){
in=new Instance();
}
return in;
}</span>
考虑到线程安全(上面的写法在多个线程同时访问时可能出现多个实例),又加入了同步锁,最后得到如下代码:
<span style="font-size:18px;"> public static Instance getInstance() {
if (in == null) {
synchronized (Instance.class) {
if (in == null) {
in = new Instance();
}
}
}
return in;
}</span>