单例模式——国庆收心

转眼国庆就结束了(我们公司调假,今明上班,89放假)。

几天不coding,都快生疏了。 今天还是聊聊设计模式。早上又读了一遍JAVA大神的 关于设计模式的文章,受益匪浅,其实每次拜读,都有新的收获。
就像我刚入行时听Mars老师说的,随着你编程阅历的增加,你会发现,每一年,你对接口的理解都不一样。

其实在coding世界,虽然工作的时候我们会抱怨需求又变化了啊等等,但coding的乐趣,就是要拥抱变化,也因此,才会有设计模式之说。

别看一个简单的单例模式,其实,还是有很深的编程思想和变化在里面的。
今天做个简单的例子:就说说饿汉模式和懒汉模式的区别吧


代码主角:
1、Singleton类(单例类)


首先,是饿汉模式:
简单的三部曲

public class Singleton {

    // 饿汉一开始就实例化,即使程序可能不用到该类,也要消耗该资源。
    private static Singleton instance = new Singleton();

    // 私有化构造方法,避免被外部new
    private Singleton() {
    }

    // 公有的静态方法,用以获取单例
    public static Singleton getInstance() {
        return instance;
    }

}

其次,是简单的懒汉模式:

public class Singleton {

    // 懒汉模式,区别于恶汉模式在于,饿汉一开始就实例化,消耗资源。
    //不过懒汉模式因此也就有了线程安全的问题
    private static Singleton instance = null;

    // 私有化构造方法,避免被外部new
    private Singleton() {
    }

    // 公有的静态方法,用以获取单例,如果已创建,直接返回,未创建,则new一个
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

}

考虑到线程安全,其实这里需要加锁

    // 考虑到线程安全,这里需要加锁
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

大功告成,写个测试类Test试试:

public class Test {

    public static void main(String[] args) {

        //分别实例化两个对象,输出结果,判断是否是同一个对象
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        System.out.println(singleton1);
        System.out.println(singleton2);
    }

}

来看看
控制台输出的结果:

Singleton.Singleton@2a139a55
Singleton.Singleton@2a139a55

完全相同。所以无论实例化多少个对象,其实只有第一次实例化时是创建对象,之后都是返回已有的对象。


最后的最后,今天就不上源码了,很简单,建议小伙伴们国庆后自己动手码一码,
其实我今天最想做的事是:







Java之美[从菜鸟到高手演变]之设计模式 三部曲:
1. http://blog.csdn.net/zhangerqing/article/details/8194653
2. http://blog.csdn.net/zhangerqing/article/details/8239539
3. http://blog.csdn.net/zhangerqing/article/details/8243942

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值