GOF——单例模式

20 篇文章 0 订阅
2 篇文章 0 订阅

一个类只存在一个实例化对象。分为懒汉式和饿汉式,懒汉式,懒加载只有需要的时候才会创建实例。饿汉式,当类被第一次调用时,就会创建实例。

当占用资源少,不需要延时加载时,可采用枚举创建单例,好于饿汉式。

当占用资源大,需要延时加载时,可采用静态内部类创建,好于懒汉式。       

由于双重检测锁存在问题,不在进行总结。 

/**
 * 饿汉式--没有延时加载,不使用也会加载,浪费资源
 */
class SingletonDemo1 {
    private static SingletonDemo1 instance = new SingletonDemo1();

    private SingletonDemo1() {

    }

    public static SingletonDemo1 getInstance() {
        return instance;
    }
}
/**
 * 懒汉式--延时加载,需要时才创建
 */
class SingletonDemo2 /*implements Serializable */{
    private static SingletonDemo2 instance = null;

    private SingletonDemo2() {
        //防止通过反射实例化
        /*if (instance != null) {
            throw new RuntimeException();
        }*/

    }

    public synchronized static SingletonDemo2 getInstance() {
        if (instance == null) {
            instance = new SingletonDemo2();
        }
        return instance;
    }

    //防止反序列化破解单例
    /*private Object readResolve() throws ObjectStreamException {
        return instance;
    }*/

}
/**
 * 静态内部类实现--线程安全,调用效率高,延时加载
 */
class SingletonDemo4 {

    private static class SingletonClassInstance {
        private static final SingletonDemo4 instance = new SingletonDemo4();

    }

    private SingletonDemo4() {

    }

    public static SingletonDemo4 getInstance() {

        return SingletonClassInstance.instance;
    }

}
/**
 * 通过枚举方式实现--没有延时加载
 */
enum SingletonDemo5 {
    INSTANCE;

    public void singletonOperation() {

    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值