设计模式之超详细的单利模式

一、单例模式之饿汉式

1.创建SingleModel类

public class SingleModel {

    //整个应用程序中只有1个实例
    private static SingleModel singleModel = new SingleModel();

    //只有自己能创建自己的实例
    private SingleModel() {
    }

    //对外提供获取该实例的方法
    public static SingleModel getInstance(){
        return singleModel;
    }

    public void message(){
        System.out.println("hello!");
    }
}

2.单利测试

public static void main1(String[] args) {
        //所有不同对象存储的集合
        List<SingleModel> array = new ArrayList<SingleModel>();
        //获取单利实例
        SingleModel instance1 = SingleModel.getInstance();
        array.add(instance1);

        for (int i = 0; i <100000 ; i++) {
            SingleModel instance2 = SingleModel.getInstance();
            if(instance1!=instance2){
                array.add(instance2);
            }
        }

        System.out.println(RamUsageEstimator.sizeOf(array));
    }

3.结果

96

二、多种单利模式之懒汉式

1.创建 SingleModel1类

 //整个应用程序中只有1个实例
    private static SingleModel1 singleModel;

    //只有自己能创建自己的实例
    private SingleModel1() {
    }

    //对外提供获取该实例的方法(添加了同步锁可以解决线程安全,但是效率会明显的降低获取对象实例)
    public static synchronized SingleModel1 getInstance(){
        //当singleModel==null,才去实例化
        if(singleModel==null){
            singleModel = new SingleModel1();
        }
        return singleModel;
    }

    public void message(){
        System.out.println("hello!");
    }

2.创建双重校验锁SingleModel2

采用双锁机制,安全并且在多线程请款保持高性能

public class SingleModel2 {

    //整个应用程序中只有1个实例
    private static SingleModel2 singleModel;

    //只有自己能创建自己的实例
    private SingleModel2() {
    }

    //对外提供获取该实例的方法
    public static SingleModel2 getInstance(){
        //当singleModel==null,才去实例化
        if(singleModel==null){
            synchronized (SingleModel2.class){
                if(singleModel==null){
                    singleModel = new SingleModel2();
                }
            }
        }
        return singleModel;
    }

    public void message(){
        System.out.println("hello!");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值