Java Singleton的3种实现方式
1、通过静态成员字段来实例化
public class Elvis {
/**
* 通过final的静态成员字段来调用私有的构造函数实例化对象
*/
public static final Elvis INSTANCE = new Elvis();
/**
* 私有构造函数,防止在类以外被实例化
*/
private Elvis() {
}
public void leaveTheBuilding() {
System.out.println("Leave the building...");
}
public static void main(String[] args) {
Elvis.INSTANCE.leaveTheBuilding();
}
}
2、通过公有的静态工厂方法
public class Elvis {
/**
* 把静态成员字段设置为私有的
*/
private static final Elvis INSTANCE = new Elvis();
/**
* 私有构造函数,防止在类以外被实例化
*/
private Elvis() {
}
/**
* 通过公有的静态工厂方法导出Single实例
* @return Singleton实例
*/
public Elvis getInstance(){
return INSTANCE;
}
public void leaveTheBuilding() {
System.out.println("Leave the building...");
}
public static void main(String[] args) {
Elvis.INSTANCE.leaveTheBuilding();
}
}
3、通过枚举来返回,这种方式更加简洁,无偿提供了序列化机制,绝对防止多次实例化,即使在面对多次序列化和范序列化攻击的时候。虽然这种方法没有被广泛采用,但这种方式已经成为实现Singleton的最佳方法。
public class Elvis {
/**
* 把静态成员字段设置为私有的
*/
private static final Elvis INSTANCE = new Elvis();
/**
* 私有构造函数,防止在类以外被实例化
*/
private Elvis() {
}
/**
* 通过包含单个元素的枚举类型来实现,推荐的方式(从Java 1.5 发行版起)
*/
public enum Elvis1 {
INSTANCE;
public void leaveTheBuilding() {
System.out.println("Leave the building...");
}
}
public static void main(String[] args) {
Elvis1.INSTANCE.leaveTheBuilding();
}
}

Java Singleton的3种实现方式的更多相关文章
- Java多线程的三种实现方式
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...
- java多线程的几种实现方式
java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...
- java 代理的三种实现方式
Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...
- Java 定时任务的几种实现方式
JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器] 近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动 ...
- Java多线程的两种实现方式
Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...
- XML基础+Java解析XML +几种解析方式的性能比较
XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...
- 阿里巴巴--java多线程的两种实现方式,以及二者的区别
阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...
- Java中Singleton的三种实现方式解析
一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...
- java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较
一.list简介 List列表类,顺序存储任何对象(顺序不变),可重复. List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或 ...
随机推荐
- Charles抓包https
Charles抓包https 灰灰是只小贱狗 2018.05.08 10:46 字数 762 阅读 7800评论 3喜欢 3 抓取HTTPS请求包,对数据进行排查检验 1.安装Charles 2.电脑 ...
- C# WebBrowser控件使用整理
一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件, ...
- 几个常用linux命令语句
几个常用linux命令 英文原文:What are the most useful "Swiss army knife" one-liners on Unix? 下面的这些内容是 ...
- poj 2240 Arbitrage 题解
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21300 Accepted: 9079 Descri ...
- Team Foundation(通常记作“TFS”)
ylbtech-Miscellaneos:Team Foundation(通常记作“TFS”) Team Foundation是一个服务平台,为 Microsoft 提供源代码管理数据收集报告等工作. ...
- SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行
ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...
- matlib实现梯度下降法(序一)
数据来源:http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant 数据描述: 有四个输入特征,这些数据来自电厂,这四个特征和 ...
- PHP 字符串包含判断
遇到了这个问题.记录一下.用strpos查找字符串来进行字符串包含判断. <?php //$res = strpos("hello", "hx"); $r ...
- redis调优 -- 内存碎片
最近查看了一下redis运行状况,发现公司测试服务器的redis内存不太够用,但是实际占用内存的数据量其实不大,以前也没有这种情况,之前在cache层新增了一个防刷积分任务的逻辑才会这样,搜索一下原因 ...
- NLP 中的embedding layer
https://blog.csdn.net/chuchus/article/details/78386059 词汇是语料库的基本元素, 所以, 使用embedding layer来学习词嵌入, 将一个 ...