创建单例的几种方式
来源:互联网 发布:班服短袖淘宝 编辑:程序博客网 时间:2024/05/19 07:28
class Singleton1{ //双重锁
private static Singleton1 singleton;
private Singleton1() {}
public static Singleton1 getInstance() {
if (singleton==null) {
synchronized (Singleton1.class) {
if (singleton==null) {
singleton=new Singleton1();
}
}
}
return singleton;
}
}
class Singleton2{ //饿汉模式
private static Singleton2 singleton=new Singleton2();
private Singleton2() {}
public static Singleton2 getInstance(){
return singleton;
}
}
class Singleton3{ //懒汉模式
private static Singleton3 singleton;
private Singleton3(){}
public static Singleton3 getInstance(){
if (singleton==null) {
singleton=new Singleton3();
}
return singleton;
}
}
enum Singleton4{ //枚举
INSTANCE;
public void method(){
System.out.println("枚举");
}
}
class Singleton5{ //静态内部类
private static class SingletonHolder{
private final static Singleton5 singleton=new Singleton5();
}
private Singleton5(){}
public static Singleton5 getInstance(){
return SingletonHolder.singleton;
}
}
class Singleton6{ //登记模式 可以继承的单例
private static HashMap<String, Singleton6> registry;
private static final String KEY_STRING="SINGLETONKEY";
static{
Singleton6 singleton=new Singleton6();
registry.put("SINGLETONKEY", singleton);
}
protected Singleton6(){}
public static Singleton6 getInstacne(String key){
if (key==null) {
key=KEY_STRING;
}
if(registry.get(key)==null){
try {
registry.put(key, (Singleton6) Class.forName(key).newInstance());
} catch (InstantiationException | IllegalAccessException
| ClassNotFoundException e) {
e.printStackTrace();
}
}
return registry.get(key);
}
}
class Singleton6Child extends Singleton6{
protected Singleton6Child(){
}
public static Singleton6Child getInstacne(){
return (Singleton6Child) Singleton6.getInstacne(null);
}
}
private static Singleton1 singleton;
private Singleton1() {}
public static Singleton1 getInstance() {
if (singleton==null) {
synchronized (Singleton1.class) {
if (singleton==null) {
singleton=new Singleton1();
}
}
}
return singleton;
}
}
class Singleton2{ //饿汉模式
private static Singleton2 singleton=new Singleton2();
private Singleton2() {}
public static Singleton2 getInstance(){
return singleton;
}
}
class Singleton3{ //懒汉模式
private static Singleton3 singleton;
private Singleton3(){}
public static Singleton3 getInstance(){
if (singleton==null) {
singleton=new Singleton3();
}
return singleton;
}
}
enum Singleton4{ //枚举
INSTANCE;
public void method(){
System.out.println("枚举");
}
}
class Singleton5{ //静态内部类
private static class SingletonHolder{
private final static Singleton5 singleton=new Singleton5();
}
private Singleton5(){}
public static Singleton5 getInstance(){
return SingletonHolder.singleton;
}
}
class Singleton6{ //登记模式 可以继承的单例
private static HashMap<String, Singleton6> registry;
private static final String KEY_STRING="SINGLETONKEY";
static{
Singleton6 singleton=new Singleton6();
registry.put("SINGLETONKEY", singleton);
}
protected Singleton6(){}
public static Singleton6 getInstacne(String key){
if (key==null) {
key=KEY_STRING;
}
if(registry.get(key)==null){
try {
registry.put(key, (Singleton6) Class.forName(key).newInstance());
} catch (InstantiationException | IllegalAccessException
| ClassNotFoundException e) {
e.printStackTrace();
}
}
return registry.get(key);
}
}
class Singleton6Child extends Singleton6{
protected Singleton6Child(){
}
public static Singleton6Child getInstacne(){
return (Singleton6Child) Singleton6.getInstacne(null);
}
}
0 0
- 单例的几种创建方式
- 创建单例的几种方式
- 创建单例模式的几种方式
- 创建单例模式(Singleton)的几种方式
- 浅谈单例模式的几种创建方式
- 单例实现的几种方式
- 单例的几种实现方式
- 实现单例的几种方式
- 单例的几种实现方式
- 五种创建单例的方式
- 创建单例的两种方式
- 单例的两种创建方式
- 单例的两种创建方式
- 单例创建的2种方式
- 单例的创建方式
- 创建单例的方式
- 单例创建的方式
- 几种常见的单例的设计方式
- 数学建模打个酱油
- c# DataTable遍历
- xmlns:android作用以及自定义布局属性
- Java集合框架List,Map,Set等
- PAT - 肿瘤诊断 - 三维简单广搜
- 创建单例的几种方式
- 【高性能】Linux挂载GPT硬盘
- saltstack[2]-命令行与state文件
- HDU 5078 Osu!(水题)
- 在vs2013中如何实现opengl红宝书第八版的首个例子
- HTML基础大全
- 数据通信原理调制作用
- http post 请求数据格式选择
- 第1章 Web开发新时代