Android面试必问的设计模式之单例模式详解

每次面试中都会遇到设计模式的问题,特别是单例模式在日常开发中的应用场景.以前就是知道有这个模式,没有深入的了解,今天正好学习了解一下.单例模式即在项目中提供唯一可访问当对象.只有一个对象被使用,实现了对象的重复使用.

1.饿汉式

/*
  饿汉式
 */
public class SinglePattern {

    private static SinglePattern singlePattern = new SinglePattern();

    public static SinglePattern getInstance() {
        return singlePattern;
    }

}

特点:饿汉式在类被加载的时候就已经实例化创建了对象,如果在项目中使用,只需调用该类的getInstance方法就能立刻得到该对象,速度快,如果项目中多处使用该对象,每次调用就会创建一个对象,占用的内存多,容易造成内存泄漏.

2.懒汉式

/*
  懒汉式
 */
public class SinglePattern {

    private static SinglePattern singlePattern = null;

    public static SinglePattern getInstance() {
        if (singlePattern == null) {
            synchronized (SinglePattern.class) {
                if (singlePattern == null) {
                    singlePattern = new SinglePattern();
                }
            }

        }
        return singlePattern;

    }

}

特点:双重判断同步锁.这样写一开始我也觉得复杂了,为什么要加同步锁,总觉得同步锁没啥用,但是参考网上的说法,在多线程的情况下,几个线程同时访问该对象.就会出现线程抢占资源出现问题.而出现线程安全问题.加了同步锁之后,一个线程进入了,其他线程就必须等待前一个线程结束才能使用该对象资源.进入同步锁之后还要判断一次对象是否为空,这样可以避免重复创建对象,浪费内存空间.

3.静态内部类实现单例模式

/*
  静态内部类实现单例模式
 */
public class SinglePattern {


    public static SinglePattern getInstance() {

        return Singleholder.singlePattern;

    }
    private static class Singleholder{

        private static SinglePattern singlePattern =  new SinglePattern();
    }

}

特点:静态内部类实现的好处是,当加载外面类的时候,内部类没有被调用.只有当调用类getInstance 方法才会实例化对象.而且只是当第一次调用时候才会实例化一次,保证了对象当唯一性.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值