当前位置: 首页 > news >正文

【剑指offer】面试题 2. 实现 Singleton 模式

面试题 2. 实现 Singleton 模式

题目:设计一个类,我们只能生成该类的一个实例。
单例模式:确保一个类只有一个实例,并提供了一个全局访问点。

Java 实现

1.饿汉模式

//饿汉模式
public class Singleton1 {
    //私有化构造方法
    private Singleton1() {
    }

    private static final Singleton1 instance = new Singleton1();

    public static Singleton1 getInstance1() {
        return instance;
    }
}

2.饿汉模式、变种

//饿汉模式、变种
public class Singleton2 {
    //私有化构造方法
    private Singleton2() {
    }

    private static final Singleton2 instance;

    static {
        instance = new Singleton2();
    }

    public static Singleton2 getInstance2() {
        return instance;
    }
}

3.懒汉、线程不安全

//懒汉、线程不安全
public class Singleton3 {
    //私有化构造方法
    private Singleton3() {
    }

    private static volatile Singleton3 instance = null;

    public static Singleton3 getInstance3() {
        if (instance == null) {
            instance = new Singleton3();
        }
        return instance;
    }
}

4.懒汉、线程安全

//懒汉、线程安全
public class Singleton4 {
    //私有化构造方法
    private Singleton4() {
    }

    private static volatile Singleton4 instance = null;

    public static synchronized Singleton4 getInstance4() {
        if (instance == null) {
            instance = new Singleton4();
        }
        return instance;
    }
}

5.静态内部类

//静态内部类
public class Singleton5 {
    //私有化构造方法
    private Singleton5() {
    }

    //静态内部类
    private static final class SingletonHandler {
        private static final Singleton5 INSTANCE = new Singleton5();
    }

    public static Singleton5 getInstance5() {
        return SingletonHandler.INSTANCE;
    }
}

6.枚举

//枚举
public enum Singleton6 {
    INSTANCE;

    public void whateverMethod() {

    }
}

7.双重校验锁

//双重校验锁
public class Singleton7 {
    //私有化构造方法
    private Singleton7() {
    }

    private static volatile Singleton7 instance = null;

    public static Singleton7 getInstance7() {
        if (instance == null) {
            synchronized (Singleton7.class) {
                if (instance == null) {
                    instance = new Singleton7();
                }
            }
        }
        return instance;
    }
}

转载于:https://www.cnblogs.com/hglibin/p/9026546.html

相关文章:

  • Go-变量-var
  • 复习mysql
  • 【转载】C/C++内存对齐
  • linux运维、架构之路-MHA高可用方案
  • 线索二叉树实例(前序创建,中序遍历)--2018.5.15
  • vuex填坑记录
  • 多版本并发控制
  • Unity4-用户输入
  • Java Web基础教程(二)开发基础
  • ActiveMq启动后,输入网址出现HTTP ERROR: 503错误的问题
  • 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)
  • win10应用程序添加到开机启动项的两种解决办法
  • SSL-ZYC 2432 面积最大
  • 剑指offer-用两个栈实现队列
  • 简单介绍帧动画
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • docker python 配置
  • golang 发送GET和POST示例
  • mysql常用命令汇总
  • Mysql优化
  • node和express搭建代理服务器(源码)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue学习第二天
  • 后端_ThinkPHP5
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 来,膜拜下android roadmap,强大的执行力
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 首页查询功能的一次实现过程
  • 问题之ssh中Host key verification failed的解决
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用Visual Studio开发以太坊智能合约
  • 《天龙八部3D》Unity技术方案揭秘
  • Spring第一个helloWorld
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Java并发新构件之Exchanger
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)STL算法之遍历容器
  • (175)FPGA门控时钟技术
  • (4.10~4.16)
  • (vue)页面文件上传获取:action地址
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (过滤器)Filter和(监听器)listener
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)终结任务
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五)IO流之ByteArrayInput/OutputStream
  • (译)2019年前端性能优化清单 — 下篇
  • (转)【Hibernate总结系列】使用举例
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 材料检测系统崩溃分析
  • .NET 设计模式—适配器模式(Adapter Pattern)