在面试的时候,单例模式是经常被提问到的,编写一个Singleton类,可以更好的向面试官展现出自己对单例模式的理解。下面我列举出四个方式在展示Singleton类

1.简单的方式,但这个有一个缺点,那就是在并发执行时,可能存在多个实例。

 1 public class SingletonDemo1 {
 2     private static SingletonDemo1 INSTANCE;
 3     private SingletonDemo1(){
 4
 5     }
 6     public static SingletonDemo1 getInstance(){
 7         if(INSTANCE==null){
 8             INSTANCE = new SingletonDemo1();
 9         }
10         return INSTANCE;
11     }
12 }

2.公共域的方式,特点就是简单,缺点就是做不到在返回的过程中做额外的逻辑处理,所以引申出可以用工厂来展示单例模式。

1 public class SingletonDemo2 {
2     public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
3     private SingletonDemo2(){
4
5     }
6
7 }

3.工厂化方式,特点是可以在实例过程中添加逻辑。

 1 public class SingletonDemo3 {
 2     public static final SingletonDemo3 INSTANCE = new SingletonDemo3();
 3     private SingletonDemo3(){
 4
 5     }
 6     public static SingletonDemo3 getInstance(){
 7         return INSTANCE;
 8     }
 9
10 }

4.枚举方式,最佳实践,推荐使用,并且他不会存在多个实例化的问题以及反序列化的问题。

1 public enum SingletonDemo4 {
2     INSTANCE;
3
4     public static void saySomthing(String str){
5         System.out.println("hello"+str);
6     }
7 }

Main方法测试:

 1 public class Main {
 2
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         System.out.println("SingletonDemo1"+SingletonDemo1.getInstance());
 6         System.out.println("SingletonDemo1"+SingletonDemo1.getInstance());
 7
 8         System.out.println("SingletonDemo2"+SingletonDemo2.INSTANCE);
 9         System.out.println("SingletonDemo2"+SingletonDemo2.INSTANCE);
10
11         System.out.println("SingletonDemo3"+SingletonDemo3.getInstance());
12         System.out.println("SingletonDemo3"+SingletonDemo3.getInstance());
13
14         System.out.println("SingletonDemo4"+SingletonDemo4.INSTANCE);
15         System.out.println("SingletonDemo4"+SingletonDemo4.INSTANCE);
16
17         SingletonDemo4.INSTANCE.saySomthing("SingletonDemo4");
18     }
19
20 }

测试结果输出:通过运行结果可以看到,每个用例都被实例化一次,这就是单例模式的精髓:全局资源共享。

编写一个Singleton类(单例模式)相关推荐

  1. 定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法。 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值。

    定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法. 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值. public cla ...

  2. 编写一个学生类 student,包含的属性有学号、姓名年龄,将所有学生存储在一个数组中

    编写一个学生类 student,包含的属性有学号.姓名年龄,将所有学生存储在一个数组中,自拟数据,用数组的初始化方法给数组赋值,并实现如下操作: ①将所有学生年龄增加一岁 ②按数组中顺序显示所有学生信 ...

  3. 计算机最低分怎么英语,编写一个学生类 有年龄 英语、数学、计算机三门成绩 求平均分、最高分、最低分...

    /*编写一个学生类 有年龄 英语.数学.计算机三门成绩 求平均分.最高分.最低分 */ package test; class Student{ private String name; privat ...

  4. 【java】编写一个圆柱体类Cylinder,它继承于Circle类

    编写一个圆柱体类Cylinder,它继承于上面的Circle类.还拥有: ①一个成员变量 double hight(私有,浮点型): // 圆柱体的高: ②构造方法 Cylinder (double ...

  5. 编写一个圆类Circle

    编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) ...

  6. JAVA 编写一个员工类,成员变量和成员方法自拟,编写一个测试类

    课后习题练习 3.4 编写程序实现以下功能: (1).员工类(Emploee):c=成员变量包含员工号和员工姓名,成员方法包含构造方法和输出方法(输出员工信息). (2). 部门主管类(Manager ...

  7. java编写一个学生类和教师类_JAVA:1、编写一个学生类,类名为Student,包含如下成员:...

    1.编写一个学生类,类名为Student,包含如下成员:成员变量:1)变量名:name:类型:String:访问权限:private2)变量名:ID:类型:String:访问权限:private3) ...

  8. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平

    问题: 编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English).数学课(Math)和平均值(avg),方法包括求三 ...

  9. //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg)

    //编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求 ...

最新文章

  1. shell 脚本简单入门
  2. 科研团队如何探索商业化落地?这家语音AI公司用十年科学试验打了样
  3. spingmvc的一些简单理解和记录
  4. html语言中的转行标记是6,网页设计与制作模拟试题
  5. 【Python】自动化升级所有pip安装的包
  6. constraintlayout_androidApi:ConstraintLayout
  7. Python入门--while循环
  8. glBindTexture--纹理
  9. NB-IoT、eMTC与LoRa三大物联网技术相争,共存还是鏖战?
  10. 线性代数 (二): 证明 A^T 乘以 A 为半正定矩阵
  11. jsp怎么做柱状图_jsp圆饼图与柱状图代码
  12. 摄像机标定到底是在干什么?
  13. python二维插值_SciPy二元样条插值
  14. MySQL 5.7 深度解析: JSON数据类型使用
  15. java设计模式-设配器模式
  16. Win10下SQL2000 企业管理器 新建表/修改表 崩溃问题的应急
  17. python系列11:python的游戏引擎
  18. 计算机专业的学生买什么电脑,设计类学生买什么电脑
  19. 创建AccessToken工具类
  20. 2012最新网络电台mms地址

热门文章

  1. 全球唯一禁欲的地方:男人从没见过女人
  2. android 图像对比度,Android OpenGL ES - 反相、曝光、对比度、饱和度、色调滤镜
  3. 用scrapy框架爬取微博所有人的微博内容的
  4. android:scaleType 属性介绍
  5. 小马识途:问答营销有哪些注意事项有哪些?
  6. PCB设计中过孔的概念和分类
  7. 首席新媒体黎想教程:如何构建策划活动,所需遵循的原则!
  8. 深入理解Java虚拟机-虚拟机执行子系统
  9. LTE学习笔记六:MIMO多天线技术
  10. matlab写hdf文件(含地理信息文件hdfeos)