设计模式一:单例模式

本文介绍了单例模式的两种主要形式——饿汉式和懒汉式,并对比了它们的特点及适用场景。饿汉式单例在类加载时即完成实例化,而懒汉式则在首次调用时进行实例化。

设计模式一:单例模式

单例模式有很多变种,由于本人能力,就总结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;
    }
}

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值