OOAD之单例模式Singleton的6种写法

1  主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 

一 :第一种 饿汉式(预加载)

 1 public class Singleton {
 2    private Singleton(){}////在自己内部定义自己一个实例,注意这是private
 3     private static Singleton instance = new Singleton();
 4
 5     public static Singleton getInstance() {
 6     return instance;
 7     }
 8
 9      public static void main(String[] args) {
10     Singleton sing=Singleton.getInstance();
11     System.out.println(sing);
12   }
13 }  

二:第二种 饿汗式(变种)

 1 public class Singleton {
 2      private Singleton (){}
 3     private Singleton instance = null;
 4     static {
 5     instance = new Singleton();
 6     }
 7
 8     public static Singleton getInstance() {
 9     return this.instance;
10     }
11    public static void main(String[] args) {
12     Singleton sing=Singleton.getInstance();
13     System.out.println(sing);
14 }
15 }  

 

三:第三种 懒汉式(懒加载 线程不安全

 1 public class Singleton {
 2     private Singleton(){}
 3     private static Singleton instance;
 4
 5     public static Singleton getInstance() {
 6     if (instance == null) {
 7         instance = new Singleton();
 8     }
 9     return instance;
10     }
11
12     public static void main(String[] args) {
13     Singleton sing=Singleton.getInstance();
14     System.out.println(sing);
15 }
16 }  

四:第四种 懒汉式(单线程安全)

 1 public class Singleton {
 2     private Singleton(){}
 3     private static Singleton instance;
 4
 5     public static synchronized Singleton getInstance() {
 6     if (instance == null) {
 7         instance = new Singleton();
 8     }
 9     return instance;
10     }
11
12    public static void main(String[] args) {
13     Singleton sing=Singleton.getInstance();
14     System.out.println(sing);
15 }
16 }  

五:第五种  静态内部类

 1 public class Singleton {
 2     private Singleton (){}
 3     private static class SingletonHolder {
 4     private static final Singleton INSTANCE = new Singleton();
 5     }
 6
 7     public static final Singleton getInstance() {
 8     return SingletonHolder.INSTANCE;
 9     }
10    //因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。
11
12 }  

 

 

六:第六种  双重校验锁

 1 public class Singleton {
 2     private volatile static Singleton instance=null;
 3     private Singleton (){}
 4     public static Singleton getInstance() {
 5     if (instance== null) {
 6         synchronized (Singleton.class) {
 7         if (instance== null) {
 8             instance= new Singleton();
 9         }
10         }
11     }
12     return instance;
13     }
14 } 

 

这种方式只是在初始化Singleton那部分代码的时候添加同步锁,这样提高了效率。

 

时间: 2024-10-30 05:32:57

OOAD之单例模式Singleton的6种写法的相关文章

单例模式的七种写法(二)

第一种(懒汉,线程不安全):   Java代码   public class Singleton {       private static Singleton instance;       private Singleton (){}          public static Singleton getInstance() {       if (instance == null) {           instance = new Singleton();       }     

单例模式的七种写法

Java:单例模式的七种写法 转载出处:http://cantellow.javaeye.com/blog/838473 第一种(懒汉,线程不安全):  1 public class Singleton {   2     private static Singleton instance;   3     private Singleton (){}    4     public static Singleton getInstance() {   5     if (instance ==

Java中单例模式的7种写法_java

第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作.

C# 单例模式的五种写法

C# 单例模式的五种写法及优劣分析,见下文: [单例模式及常见写法](http://blog.csdn.net/jiankunking/article/details/50867050)

.Net 单例模式(Singleton)

单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类   每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中.每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情 况.每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用. 问题描述:         单例模式 Si

.Net 单例模式(Singleton)_实用技巧

每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中.每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况.每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用. 问题描述:         单例模式 Singleton Pattern 问题解决: (1)单例模式简介: Singleton模式要求一个类有且仅有一个实例,并且提供了一个

php设计模式——单例模式(Singleton)的常见应用场景

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一. 这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html .当然也可以自己搜索.

Java单例模式实现的几种方式_java

Java单例模式实现的几种方式 单例模式好多书上都是这么写的: public class SingleTon1 { private SingleTon1(){ } private static SingleTon1 instance = null; public static SingleTon1 getInstance(){ if(instance == null){ instance = new SingleTon1(); } return instance; } } 但是实际开发中是不会这

设计模式之——单例模式(Singleton)的常见应用场景

原文:http://blog.csdn.net/likika2012/article/details/11483167 单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一. 这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terr