(1)单例模式精讲

一 说明

只能生成一个实例的类就是实现了Singleton(单例)模式的类型。

二 四种实现方式

1 最简单的写法(单线程)

这种写法只适用于单线程环境,上代码:

public class Singleton {

	private static Singleton instance= null;

    // 构造函数为private,阻断通过new Singleton1()的方式新建实例
	private Singleton() {
	}

	// 每次获取实例的时候通过调用此类方法
	public static Singleton Instance() {
			if(instance == null) {
					instance = new Singleton();
			}
			return instance;
	}
}  

缺点:只适用于单线程,当有二个线程同时运行到if(instance == null) 语句时,instance还为null,此时,二个线程都会执行 instance = new Singleton1(),改进方案见2

2 利用锁,可使用于多线程

public class Singleton {

    private static Singleton instance = null;

    private static Lock lock = new ReentrantLock();

    private Singleton() {
    }

    public static Singleton instance() {
        lock.lock();
        if(instance == null) {
            instance = new Singleton();
        }
        lock.unlock();
        return instance;
    }
}

通过锁的使用,保证了线程安全。缺点就是加锁开销大,优化见3

3 减少锁开销的优化版

public class Singleton {

    private static Singleton instance = null;

    private static Lock lock = new ReentrantLock();

    private Singleton() {
    }

    public static Singleton instance() {
    	// 加锁前做一个判断,减少开销
        if(instance == null) {
            lock.lock();
            if(instance == null) {
                instance = new Singleton();
            }
            lock.unlock();
        }
        return instance;
    }
}

4 利用静态构造函数

public class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton instance() {
        return instance;
    }
}

代码相对简化了很多,唯一的缺点 instance并不是第一次用到Singleton的时候,就会被创建,而是第一次用到Singleton的时候,就会被创建。假设我们给Singleton再增加一个静态方法,调用该静态方法,不需要创建实例instance,但按照目前这种情况,仍然会过早地创建实例,从而降低内存的使用效率。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一套被广泛应用于软件开发中的设计思想和模板,它们提供了一种解决常见设计问题的通用解决方案。这些模式帮助开发人员在设计和实现软件时遵循最佳实践,提供了可重用、可扩展和易于维护的代码结构。 Java设计模式可以分为三个主要类别:创建型模式、结构型模式和行为型模式。 首先,创建型模式包含了单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。这些模式用于创建对象和管理它们的实例化过程,以及确保系统中只存在一个实例或一组相关对象。 其次,结构型模式包含了适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式关注对象之间的组合和关系,以提供更灵活的结构和功能,并支持系统的扩展和修改。 最后,行为型模式包含了命令模式、中介者模式、观察者模式、迭代器模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式用于管理对象之间的交互和通信,以及定义对象的行为和状态。 不同的设计模式适用于不同的情况和需求。开发人员可以根据自己的需求选择合适的模式,并将其应用于项目中,以提高代码质量、可重用性和可维护性。同时,理解和掌握设计模式也有助于培养良好的设计思维和编程技巧,提高开发人员的工程能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值