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

标签: 设计模式 软件设计 singleton 多线程 实例
203人阅读 评论(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容器就使用的单例模式

    

查看评论

Dll中导出类--Delphi实战之一

   Dll中导出类--Delphi实战之一作者: Musicwind®创建时间: 2001-11-01~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...
  • Musicwind
  • Musicwind
  • 2001-11-02 21:24:00
  • 1645

设计模式:这是最全面 & 详细的 单例模式(Singleton)分析指南

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

Java设计模式之一 单例设计模式

设计模式: 设计模式的概念首先来源于其它行业:建筑业,在早起建房子的时候,肯定是经验缺乏、显得杂乱无序的,这就会造成很多问题,在行业发展过程,通过不断的经验积累,前辈们针对这些问题提出了合理解决方案...
  • qq_32736689
  • qq_32736689
  • 2016-04-07 08:29:45
  • 2545

设计模式之复合模式和总结篇

/** * * 复合模式-->在一个解决方案中结合两个或者多个模式,以解决一般或者重复发生的问题 * 模式-->是在某种情境下,针对某种问题的某种解决方案 * 模式类目完整的描述设计模式...
  • undergrowth
  • undergrowth
  • 2014-12-27 20:43:27
  • 1251

java设计模式之单例模式5种方法及优缺点小结

单例设计模式的用处。单例设计模式是指,某个类只有一个实例。在计算机系统中类似于打印机和最常见的就是任务管理器的对话框,不管几个用户同时登录windows 打开的任务对话框只有一个。常见的几种实现方式:...
  • gwbbigbang
  • gwbbigbang
  • 2017-06-04 18:27:09
  • 479

JAVA设计模式之单例模式

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

Java四种单例设计模式

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

java设计模式之五 —— 单例模式的三种模式优缺点整理

本来一直以为单例很简单,不打算整理了。不过本着求学需严谨的心态,还是去看了一下。确实有所收获。单例模式:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供...
  • a1961613299
  • a1961613299
  • 2015-08-14 18:01:32
  • 1449

Java设计模式之单例模式(恶汉式和懒汉式)

/*  * 单例模式:  *         饿汉式:类一加载就创建对象  *         懒汉式:用的时候,才去创建对象  * 面试题:单例模式的思想是什么?写一个代码体现(我们最好写懒...
  • u012110719
  • u012110719
  • 2015-05-02 08:47:38
  • 4023

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

概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。  ...
  • tolcf
  • tolcf
  • 2015-10-21 22:56:49
  • 6801
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 11万+
    积分: 3560
    排名: 1万+
    github地址
    博客专栏
    最新评论