Java常见设计模式之单例模式

原创 2018年04月16日 14:57:05

一、单例模式的特点:

    1.单例模式有且只有一个实例;

    2.单例模式必须自己创建自己的唯一实例;

    3.单例模式必须向其他对象提供这一实例;(对外提供获取唯一实例的方法)

二、单例模式的优点:

    避免实例对象的重复创建,减少创建对象时的时间开销,节约内存空间;

三、常见单例模式写法:

    1.饿汉式

public class Singleton{
    private static Singleton st = new Singleton();
    private Singleton() {};
    public static Singleton getInstance() {
        return st;
    }    
}

    饿汉式顾名思义,每次一用它就直接创建了实例,优点是不存在多线程访问的安全问题,缺点是这个实例在程序生命周期中都一直存在,对于内存资源的占用较高;

    2.懒汉式

public class Singleton{
    private static Singleton st = null;
    private Singleton() {};
    public static Singleton getInstance() {
        if(null == st) {
            st = new Singleton();
        }
        return st;
    }
}

    懒汉式比饿汉式的优点是实现了懒加载,在具体需要的时候才去实例化;

    缺点是线程是不安全的,适用于单线程操作中;

    3.懒汉式(线程安全,同步锁synchronized

public class Singleton{
    private static Singleton st = null;
    private Singleton() {};
    public synchronized static Singleton getInstance() {
        if(null == st) {
            st = new Singleton();
        }
        return st;
    }
}

   优点:既实现了懒加载,又实现了线程安全;

   缺点:性能较低,加锁的方法在被调用时,比一般方法的调用要慢很多,这样写对于性能的损耗较高;

   4.懒汉式(线程安全,双重校验锁)

public class Singleton {
        private static Singleton st = null;
	private Singleton() {
	};
	public static Singleton getInstance() {
		if (st == null) {
			synchronized (Singleton.class) {
				if (st == null) {
					st = new Singleton();
				}
			}
		}
		return st;
	}
}

    5.静态内部类

public class Singleton{  
    private static class SingletonHolder{  
        public static Singleton instance = new Singleton();  
    }  
    private Singleton(){}  
    public static Singleton getInstance(){  
        return SingletonHolder.instance;  
    }  
}  

    这种方法是内部类里创建实例,但是因为内部类是private私有的,所以只有在调用到私有的内部类的时候,JVM才会去创建实例对象;并且因为写在内部类里,利用了类加载机制,不存在多线程并发的问题;    


    如果需要考虑线程安全问题,推荐使用第4或第5种。

    最后是对自己说的话:单例模式是一种设计思想,很多时候我们很随意的就会new一个对象,而不会去考虑是否需要用单例去实例化,我觉得比掌握几种单例模式写法更重要的是随时考虑性能问题,更多地将单例模式运用到代码中。

设计模式之单例模式详解与应用

-
  • 1970年01月01日 08:00

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

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

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

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

浅谈常见设计模式--单例模式 简单工厂模式

今题那站在这里和大家一起分享最近在一本书上看到的关于设计模式的内容,接下来要讲的设计模式有: 单例模式 简单工厂模式 工厂方法和抽象工厂 代理模式 命令模式 策略模式 门面模式 桥接模式 观察者模式 ...
  • xikai18827083487
  • xikai18827083487
  • 2016-11-13 17:04:33
  • 1497

Java四种单例设计模式

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

Android面试设计模式之单例模式

在面试的时候面试官会问我们常用的一些设计模式,这里先介绍一下单例模式。 为什么要使用单例模式 1.控制资源的使用,通过线程同步来控制资源的并发访问; 2.控制实例产生的数量,达到节约系统资源; 3...
  • qq_435559203
  • qq_435559203
  • 2016-09-12 18:25:29
  • 676

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

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

Java中四种常见的单例模式以及各自优缺点总结

饿汉式实现: 饿汉式单例模式代码中,static变量会在类装载时初始化,此时也不会涉及多个线程对象访问该对象的问题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题。因此,可以省略synchr...
  • qq_36076233
  • qq_36076233
  • 2017-03-06 14:48:10
  • 464

JAVA设计模式之单例模式

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

java设计模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,。 行为型模式,共十一种:策略模式、模板方法)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓...
  • zgliang88
  • zgliang88
  • 2017-02-19 12:11:34
  • 1673
收藏助手
不良信息举报
您举报文章:Java常见设计模式之单例模式
举报原因:
原因补充:

(最多只允许输入30个字)