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种实现方式的更多相关文章

  1. Java多线程的三种实现方式

    java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...

  2. java多线程的几种实现方式

    java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...

  3. java 代理的三种实现方式

    Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...

  4. Java 定时任务的几种实现方式

    JAVA实现定时任务的几种方式 @(JAVA)[spring|quartz|定时器]  近期项目开发中需要动态的添加定时任务,比如在某个活动结束时,自动生成获奖名单,导出excel等,此类任务由于活动 ...

  5. Java多线程的两种实现方式

    Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...

  6. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

  7. 阿里巴巴--java多线程的两种实现方式,以及二者的区别

    阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...

  8. Java中Singleton的三种实现方式解析

    一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...

  9. java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较

    一.list简介 List列表类,顺序存储任何对象(顺序不变),可重复. List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或 ...

随机推荐

  1. CodeReview工具Gerrit的python库pygerrit2

    源代码: https://github.com/dpursehouse/pygerrit2

  2. 一致性哈希算法(consistent hashing)(转)

    原文链接:每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)  一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网 ...

  3. Python二维数组构造

    周末用python要写个算法用到来二维数组, 一时间还不知道python怎么构造多维数组出来.看到一段不错的代码, 记录一下. Python使用list嵌套实现多维数组, PHP可以使用array嵌套 ...

  4. Go语言之进阶篇连接mysql

    一.Go连接mysql 1.mysql驱动 地址:https://github.com/Go-SQL-Driver/MySQL 说明: sql.Open()函数用来打开一个注册过的数据库驱动,Go-M ...

  5. knockout示例

    最近项目需要用到knockout js,有关knockout的介绍网上已经很多很多了,但是很少有比较全面的示例,于是乎我就自己做了一个小demo,已备以后查阅.knockout经常和knockout. ...

  6. .NET开发过程中的全文索引使用技巧之Solr(转)

       前言:相信许多人都听说过.net开发过程中基于Lucene.net实现的全文索引,而Solr是一个高性能,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询 ...

  7. 快速教你成为C#高手教程

    C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言. C#看起来与Java有着惊人的相似:它包括了诸如单一继承.接口.与Java几乎同样的语法 和编译成中间代 ...

  8. 左手坐标系和右手坐标系 ZZ

    今天记录一下一些基本的数学知识,左手坐标系和右手坐标系.这些对于搞图像开发或者游戏开发的朋友来说,应该是很基础的东西,不过对于大部分人来说还是比较陌生的知识.之所以看这方面资料主要是因为在使用Andr ...

  9. 【架构】ServiceMesh初步了解

    ServiceMesh初步了解 servicemesh_百度搜索 初识Service Mesh - 原力注入微信公众账号 Service Mesh解读:新一代微服务技术新秀_EAII-企业架构创新研究 ...

  10. Linq-批量删除方法

    linq中批量删除用DeleteAllOnSubmit,里面的参数是数据集 传入某要删除的ID列表,使用对象的Contains方法与数据库中值比较,相同就删除. //批量删除 public void ...