关闭

java设计模式总结三:单例模式

标签: 设计模式软件设计singleton多线程实例
178人阅读 评论(0) 收藏 举报
分类:

单例模式定义

    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例

    

单例模式的实现方式:

懒汉式实现,不过多线程下不安全
    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  

        public static Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }  
懒汉式实现2:线程安全(添加synchronied关键字)(然而遗憾的是多线程执行效率很低,大多数情况下不需要使用多线程)
    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
        public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }  
饿汉式实现:线程安全(因为在类加载时就直接创建了该类的单例对象,所以不会因为多线程的原因而导致对象的不同,不过该实现方式显然没有实现lazy loading的效果)
    public class Singleton {  
        private static Singleton instance = new Singleton();  
        private Singleton (){}  
        public static Singleton getInstance() {  
        return instance;  
        }  
    }  
饿汉式变种(同第三种类似,不同的是初始化的顺序)
    public class Singleton {  
        private Singleton instance = null;  
        static {  
        instance = new Singleton();  
        }  
        private Singleton (){}  
        public static Singleton getInstance() {  
        return this.instance;  
        }  
    }  
静态内部类:(实现了lazy loading的效果,因为在外部类装载的时候,静态内部类还没有被使用,当调用了该外部类的getInstance方法时才会装载该静态内部类,从而生成单例模式的该外部类实例)
    public class Singleton {  
        //外部类装载的时候,在没有调用getInstance方法之前该内部类是不会被装载的,因此也实现了lazy loading的效果
        private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE;  
        }  
    }  
枚举:(用的少)

    

双重检验锁:线程安全程度最高的单例模式实现,不过并不能保证他在单处理器或者多处理器计算机上正常运行,这归咎于java平台的内存模型允许的所谓“无序输入”
    public class Singleton {  
        private volatile static Singleton singleton;  
        private Singleton (){}  
        public static Singleton getSingleton() {  
        if (singleton == null) {  
            //以防多线程并发,对当前class进行锁定
            synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
            }  
        }  
        return singleton;  
        }  
    }  

    

单例模式使用场景:

    连接数据库的时候就使用的是单例模式

    Servlet容器就使用的单例模式

    

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

单例模式(Singleton)- 最易懂的设计模式解析

前言今天我来全面总结一下Android开发中最常用的设计模式 - 单例模式。 关于设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式” 目录1. 引入1.1 解决的是什么问题之前说过,设...
  • carson_ho
  • carson_ho
  • 2016-08-16 17:15
  • 3978

java设计模式之单例模式(几种写法及比较)

概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。  ...
  • tolcf
  • tolcf
  • 2015-10-21 22:56
  • 6142

JAVA设计模式之单例模式

概念:   java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。   单例模式有一下特点:   1、单例类只能有一个实例。   2、单例类必须自己自己创建自...
  • jason0539
  • jason0539
  • 2014-04-16 06:51
  • 630360

Java四种单例设计模式

Java中的四种单例模式单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。1.饿汉式单例模式public class Singleton{ private static S...
  • twocold_2010
  • twocold_2010
  • 2016-11-20 15:13
  • 176

Java设计模式透析之 —— 单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据。但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f...
  • sinyu890807
  • sinyu890807
  • 2013-04-29 11:36
  • 23618

java面试题:java中的单例设计模式及两种实现方法的代码举例

java面试时经常会问到关于单例设计模式,因为它能考察的知识点较多且在开发中经常用到。 那我就来说一说我对于单例设计模式的一些浅见。 首先,在Java中,什么是单例呢? 就是保证类在内存中只有一...
  • qq_24693837
  • qq_24693837
  • 2016-11-23 20:49
  • 1028

Java设计模式菜鸟系列(六)单例模式建模与实现

单例模式保证了一个类只有一个实例,且提供一个访问全局点的方式,更加灵活的保证了实例的创建和访问约束。系统中只有一个实例,因此构造方法应该为私有 饿汉式:类加载时直接创建静态实例;懒汉式:第一次需要时才...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2014-10-05 00:44
  • 2444

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个)。这里主要介绍单...
  • zjx409
  • zjx409
  • 2015-08-03 22:57
  • 4426

Java中用单例模式有什么好处

Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(...
  • huanbia
  • huanbia
  • 2017-05-12 10:05
  • 1923

单例模式总结

昨天看了下单例模式的一些内容,就想做下总结。巩固一下自己所学的知识。 单例模式的目的:希望对象只创建一个实例,并且提供一个全局的访问点。 运用的场合: 有些对象只需要一个就足够了,如线程池、缓存、...
  • u013082948
  • u013082948
  • 2016-03-20 09:57
  • 304
    个人资料
    • 访问:86489次
    • 积分:3263
    • 等级:
    • 排名:第11454名
    • 原创:220篇
    • 转载:33篇
    • 译文:24篇
    • 评论:18条
    我的邮箱
    github地址
    博客专栏
    最新评论