设计模式一:单例模式

设计模式一:单例模式

单例模式有很多变种,由于本人能力,就总结5种,和其它的一些变种
1、为什么要使用单例模式
   之所以使用单例模式,是因为只需要一个实例,那为什么说,只需要一个实例呢,打个比方,你用jdbc数据库的时候,是不是只要一个数据库连接就可以了,它的地位就是一个,一个就够了、多了反而会存在浪费资源,线程不安全等等问题。在android中MyApplication类就可以使用单例,来实现,因为它就用一次,只要一个实例,这个时候,就自然出现单例的概念。

   单例1: 饿汉式单例

为什么叫饿汉呢,很简单,是由下面可以看到,在类的成员变量中,就只有自己的实例,什么意思?就是说,类一旦加载创建,它的实例就创建出来了,这样,其它对象,就直接可以使用它的getInstance方法,直接返回一个单例,它是唯一!请记住

public class Singleton {

    //成员变量,在类一加载时,就被创建,为getInstance服务
    private static Singleton instance  = new Singleton();

    private Singleton() {
//这个是私有的构造方法,只能在自己的类里,使用new ,别类是不可以使用A a = new A();
    }

    //对别类提供一个外接口,别类,可以直接使用来返回一个实例
    public static Singleton getInstance() {
        return instance;
    }
}

单例2:懒汉单例模式
为什么叫懒汉式呢,刚刚在上例中,是在成员变量中,类加载时就成功有了实例,后来的getInstance,对外的类,就可得到实例,现在我们的懒汉式,就是懒!一开始加载时,懒得创建,在getInstance方法中,才创建,是懒汉,才拖到最后


public class Singleton {
    //看到没有,只是声明,所有加载类时,没有创建实例
    private static Singleton instance = null;

    private Singleton() {
        //私有的构造方法,作用不说了,你懂的
    }

    //对外的接口,在使用方法的同时,就直接创建实例了
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }

        return instance;
    }
}

总结一下:懒汉式单例与饿汉式单例的区别是初始化推迟到到用的时候,才开始实例对象,但是前2个都是单线程时候,但多线程就存在资源问题了,那如何做的,注意哪,饿汉式单例不会存在问题,记住了,它是在类加载时,就存在了,没有抢夺资源的问题,但是懒汉式就不一样,它是有个getInstance向外部提供接口,存在多个对象去访问,自然有资源问题。
那怎么呢?我们可以加风平同步锁就可以了

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {};
    public static Singleton getInstance() {
        synchronized (Singleton.class) {
        if (instance == null) {
            instance = new Singleton();
        }
    }
return instance;
    }
}

这样就可以,但还有很多方法,可以去防止,比如静态类,枚举。等等,就不会总结了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值