编写一个Singleton类(单例模式)
在面试的时候,单例模式是经常被提问到的,编写一个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类(单例模式)相关推荐
- 定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法。 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值。
定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法. 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值. public cla ...
- 编写一个学生类 student,包含的属性有学号、姓名年龄,将所有学生存储在一个数组中
编写一个学生类 student,包含的属性有学号.姓名年龄,将所有学生存储在一个数组中,自拟数据,用数组的初始化方法给数组赋值,并实现如下操作: ①将所有学生年龄增加一岁 ②按数组中顺序显示所有学生信 ...
- 计算机最低分怎么英语,编写一个学生类 有年龄 英语、数学、计算机三门成绩 求平均分、最高分、最低分...
/*编写一个学生类 有年龄 英语.数学.计算机三门成绩 求平均分.最高分.最低分 */ package test; class Student{ private String name; privat ...
- 【java】编写一个圆柱体类Cylinder,它继承于Circle类
编写一个圆柱体类Cylinder,它继承于上面的Circle类.还拥有: ①一个成员变量 double hight(私有,浮点型): // 圆柱体的高: ②构造方法 Cylinder (double ...
- 编写一个圆类Circle
编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) ...
- JAVA 编写一个员工类,成员变量和成员方法自拟,编写一个测试类
课后习题练习 3.4 编写程序实现以下功能: (1).员工类(Emploee):c=成员变量包含员工号和员工姓名,成员方法包含构造方法和输出方法(输出员工信息). (2). 部门主管类(Manager ...
- java编写一个学生类和教师类_JAVA:1、编写一个学生类,类名为Student,包含如下成员:...
1.编写一个学生类,类名为Student,包含如下成员:成员变量:1)变量名:name:类型:String:访问权限:private2)变量名:ID:类型:String:访问权限:private3) ...
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平
问题: 编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English).数学课(Math)和平均值(avg),方法包括求三 ...
- //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg)
//编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求 ...
最新文章
- shell 脚本简单入门
- 科研团队如何探索商业化落地?这家语音AI公司用十年科学试验打了样
- spingmvc的一些简单理解和记录
- html语言中的转行标记是6,网页设计与制作模拟试题
- 【Python】自动化升级所有pip安装的包
- constraintlayout_androidApi:ConstraintLayout
- Python入门--while循环
- glBindTexture--纹理
- NB-IoT、eMTC与LoRa三大物联网技术相争,共存还是鏖战?
- 线性代数 (二): 证明 A^T 乘以 A 为半正定矩阵
- jsp怎么做柱状图_jsp圆饼图与柱状图代码
- 摄像机标定到底是在干什么?
- python二维插值_SciPy二元样条插值
- MySQL 5.7 深度解析: JSON数据类型使用
- java设计模式-设配器模式
- Win10下SQL2000 企业管理器 新建表/修改表 崩溃问题的应急
- python系列11:python的游戏引擎
- 计算机专业的学生买什么电脑,设计类学生买什么电脑
- 创建AccessToken工具类
- 2012最新网络电台mms地址