设计模式之(单例模式)

设计模式之(单例模式)



方式1

由于静态变量随着累的加载而加载,所以此方式适用于“急切”创建实例。

/**
 * Created by view_man on 2016/11/30.
 */
public class SingleInstanceI {

    private SingleInstanceI() {
    }

    private static SingleInstanceI instance = new SingleInstanceI();

    public static SingleInstanceI getSingleInstanceI() {
        return instance;
    }

    @Override
    public String toString() {
        return "This is SingleInstanceI";
    }
}


方式2

此方式属于延迟实例化的做法,如果没有方式1的那种需求,建议使用方式2。

/**
 * Created by view_man on 2016/11/30.
 */
public class SingleInstanceII {

    private SingleInstanceII() {
    }

    private static SingleInstanceII instance = null;

    public static SingleInstanceII getSingleInstanceII() {

        if (instance == null) {
            instance = new SingleInstanceII();
        }
        return instance;
    }

    @Override
    public String toString() {
        return "This is SingleInstanceII";
    }
}


方式2-1

如果涉及到处理多线程,为了线程安全,可将方式2改成如下:方式2-1

/**
 * Created by view_man on 2016/11/30.
 */
public class SingleInstanceIII {

    private SingleInstanceIII() {
    }

    private static SingleInstanceIII instance = null;

    public static synchronized SingleInstanceIII getSingleInstanceIII() {

        if (instance == null) {
            instance = new SingleInstanceIII();
        }
        return instance;
    }

    @Override
    public String toString() {
        return "This is SingleInstanceIII";
    }
}

方式2-2

为了处理多线程,我们将方式2改为方式2-1,但这种方式存在以下问题:

1、由于线程安全,涉及到性能的下降

仔细观察,发现只有在第一次执行此方法时,

getSingleInstanceIV()
才真正需要同步,所以可将方式2-1优化成为方式2-2,如下所示:

/**
 * Created by view_man on 2016/11/30.
 */
public class SingleInstanceIV {

    private SingleInstanceIV() {
    }

    private static SingleInstanceIV instance = null;

    public static SingleInstanceIV getSingleInstanceIV() {

        if (instance == null) {
            synchronized (SingleInstanceIV.class) {
                if (instance == null) {
                    instance = new SingleInstanceIV();
                }
            }
        }
        return instance;
    }

    @Override
    public String toString() {
        return "This is SingleInstanceIV";
    }
}



微信:feifie254

QQ:645139778

csdn:http://blog.csdn.net/qq645139778 或者(搜索 view-man)

GitHub:https://github.com/view-man

知乎:view-man

关注公众号:孙益飞



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值