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-11-14 14:06:55

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

Singleton的七种写法

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

单例模式你会几种写法?(转)

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 本来打算没那么快更新的,这阵子在刷Spring的书籍.在看Spring的时候又经常会看到"单例","工厂"这些字样. 所以,就先来说说单例和工厂设计模式啦,这两种模式也是很常见的,我看很多面经都会遇到这两种模式~ 本文主要讲解单例设计模式,如果有错的地方希望能多多包涵,并不吝在评论区指正! 一.单例模式概述 单例模式定义很简单:一个类中能创建一个实例,所以称之为单例! 那我们什么

Android设计模式之单例模式的七种写法

一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式的实现. 事实上常常使用的图片载入框架ImageLoader的实例创建就是使用了单例模式.由于这个ImageLoader中含有线程池.缓存系统.网络请求,非常消耗资源,不应该创建多个对象,这时候就须要用到单例模式. ImageLoader的创建代码例如以下: ImageLoader.getInsta

设计模式之单例模式Singleton pattern

单例模式Singleton pattern 一种软件设计模式.在核心结构中只包含一个被称为单例的特殊类. 一个类只有一个对象实例,并且自行实例化向整个系统提供. 动机 一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器.如在Windows中就只能打开一个任务管理器.如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源:如果这些窗口显示的内容不

一天一个设计模式(二) -单例模式(Singleton)

前言 单例模式 (Singleton) 是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 正文 (一). 优缺点 Java中单例模式 (Singleton) 是一种广泛使用的设计模式.单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.一些管理器和控制器常被设计成单例模式. 1. 优点 提供了对唯一实例的受控访问. 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象

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 == null) {   6    

1.18 单例模式的七种写法(转的 虽然看不懂但是感觉可能有用)

转载请注明出处:http://cantellow.iteye.com/blog/838473 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance()

【设计模式】C++单例模式的几种写法

单例模式是最简单的设计模式,就让我像玩简单的游戏一样写下去吧. v1: 简单模式 和这个版本有过一面之缘,但不敢苟同. class Singleton { private: Singleton() {} public: static Singleton * getIns() { static Singleton * ins = new Singleton(); return ins; } }; 问题:何时析构不明确:最重要的是调用多次getIns函数会产生多个static Singleton指针

单例模式几种写法

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