单例模式

单例设计模式八种写法

安稳与你 提交于 2019-11-30 06:34:30
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类 只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session 对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory就够,这是就会使用到单例模式 1.饿汉式(静态常量) 饿汉式(静态常量)应用实例 步骤如下: 构造器私有化 (防止 new ) 类的内部创建对象 向外暴露一个静态的公共方法。getInstance 代码实现 public class SingletonTest01 { public static void main(String[] args) { //测试 Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println(instance == instance2); // true System.out.println("instance.hashCode=" + instance.hashCode()); System.out.println(

单例模式几种写法

梦想的初衷 提交于 2019-11-30 06:28:58
本文摘自《多线程编程实战指南(核心篇)》 单例模式所要实现的目标(效果)非常简单:保持一个类有且仅有一个实例。出于性能的考虑,不少单例模式会采用延迟加载(Lazy Loading)的方式,即仅在需要用到相应实例的时候才创建实例。 单例模式 饿汉模式 1 class SingleThreadSigleton{ 2 private static SingleThreadSigleton instance = new SingleThreadSigleton(); 3 4 SingleThreadSigleton(){ 5 } 6 7 public static SingleThreadSigleton getInstance() { 8 return instance; 9 } 10 } 单线程单例 懒汉模式 1 class SingleThreadSigleton{ 2 private static SingleThreadSigleton instance = null; 3 4 private SingleThreadSigleton(){ 5 } 6 7 public static SingleThreadSigleton getInstance(){ 8 if(null == instance){ 9 instance = new SingleThreadSigleton()

------------单例总结--------------

我怕爱的太早我们不能终老 提交于 2019-11-30 05:24:55
1.什么是单例? 单例就是某个类在项目进行的生命周期中,永远只有一个实例 2.单例和单例模式的区别? 单例模式是实现单例的方法之一 (注意: spring中每个被管理bean默认是单例的,它是否使用了单例模式? 没有使用单例模式 ) <bean id="xxx" class="bean的全名称">..... 3.什么是单例模式? 如果满足以下3点的才是使用了单例模式 (1) 类本身的构造方法必须私有 (2)类本身提供一个自己的实例 (3)必须对外提供一个可以访问这个唯一实例的方法 4.单例模式的分类? 饿汉式 (没有线程安全问题) public class SendURL { //类本身提供一个自己的实例 private static SendURL instance =new SendURL(); //类本身的构造方法必须私有 private SendURL() {} //必须对外提供一个可以访问这个唯一实例的方法 public static SendURL getInstance() { return instance; } } 懒汉式 延迟加载 (存在线程安全问题)   public class SendURL { //类本身提供一个自己的实例 private volatile static SendURL instance = null; //类本身的构造方法必须私有

单例模式

拟墨画扇 提交于 2019-11-30 03:37:32
1.单例模式:    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象创建。这个类提供一种访问方式访问其唯一的对象的方式,   可以直接访问,不需要实例化该类对象。 2.特点:   1.单例类只能有一个实例。   2.单例类必须自己创建自己的唯一实例。   3.单例类必须给所有其他对象提供这一实例。 3.实现方法:   许多人可能值记得懒汉式和饿汉式,但是最好尽可能全记住,不然面试官问你还有没有其他的那就哑然了。    (1)懒汉式:线程不安全,加锁会影响效率 1 public class LSingle { 2 private static LSingle single; 3 //私有的无参构造器一定要存在:不想用别人用new的方法创建对象 4 private LSingle() {} 5 //加锁解决线程不安全问题但是影响效率 6 public static /*synchronized*/ LSingle getSingle() { 7 if(single==null)single = new LSingle(); 8 return single; 9 } 10 11 }    (2)饿汉式:线程安全,在类加载中初始化,浪费内存 1 public class ESingle { 2 private static ESingle single = new

设计模式之单例模式

会有一股神秘感。 提交于 2019-11-30 03:02:08
单例模式的好处:   单例模式的好处就是单例,就是去阿奴唯一的一个实例,应对一些特殊情况,比如数据库连接池(内置了资源)全局唯一奥玛生成器,单例可以避免重复创建,但是也会常驻内存,除非真的有必要,否则不要用单例模式。 单例模式:   1、够高函数私有化,避免别人还去new   2、公开的静态方法提供对象实例   3、初始化一个静态字段用于返回,保证全局都是这一个。 /// <summary> /// 单例类:一个构造对象很耗时耗资源类型 /// 懒汉式单例模式 /// </summary> public class Singleton { /// <summary> /// 构造函数耗时耗资源 /// </summary> private Singleton() { } /// <summary> /// 3 全局唯一静态 重用这个变量 /// </summary> private static volatile Singleton _Singleton = null; /// <summary> /// 2 公开的静态方法提供对象实例 /// </summary> /// <returns></returns> public static Singleton CreateInstance() { _Singleton = new Singleton(); return

设计模式-单例模式(Singleton Pattern)

泄露秘密 提交于 2019-11-30 02:33:33
1、介绍:    单例模式(Singleton Pattern): 所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。 场景: 频繁创建对象、管理对象是一件耗费资源的事,可以使用单例模式。 2、特点 类构造器私有 持有自己类型的属性 对外提供获取实例的静态方法 3、实现方式   编写单例模式的代码其实很简单,就分了三步: 将构造函数私有化(禁止 new 对象) 在类的内部创建实例 提供获取唯一实例的方法 第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 第二种(懒汉,线程安全): public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance

完整的单例模式

北慕城南 提交于 2019-11-30 01:59:08
import timeimport threadingclass Singsing: lock = threading.Lock() instance = None def __init__(self, name): self.name = name def __new__(cls, *args, **kwargs): if cls.instance: return cls.instance with cls.lock: if cls.instance: return cls.instance time.sleep(0.1) cls.instance = object.__new__(cls) return cls.instancedef task(): singer = Singsing('name') print(singer)for i in range(10): t = threading.Thread(target=task) t.start() 来源: https://www.cnblogs.com/xuyuwei/p/11545043.html

[高并发Java 七] 并发设计模式

 ̄綄美尐妖づ 提交于 2019-11-30 01:14:59
1. 什么是设计模式 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题 ,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领 域引入到计算机科学的。 著名的4人帮: Erich Gamma, Richard Helm, Ralph Johnson ,John Vlissides (Gof) 《设计模式:可复用面向对象软件的基础》收录23种模式 2. 单例模式 单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为 比如:全局信息配置 单例模式最简单的实现: public class Singleton { private Singleton() { System.out.println("Singleton is create"); } private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } } 由私有构造方法和static来确定唯一性。 缺点:何时产生实例 不好控制 虽然我们知道,在类Singleton第一次被加载的时候,就产生了一个实例。

Java设计模式:单例模式

微笑、不失礼 提交于 2019-11-30 00:24:44
单例模式是Java中最常用的模式之一。它用于控制通过阻止外部实例化和修改而创建的对象数。这个概念可以推广到只有一个对象存在时更有效地运行的系统,或者将实例化限制为一定数量的对象,例如: 私有构造函数 - 没有其他类可以实例化新对象。 私有引用 - 无需外部修改。 public static方法是唯一可以获取对象的地方。 单例的故事 这是一个简单的用例。一个国家只能有一位总统。因此,无论何时需要总统,都应该归还唯一的总统,而不是创建新总统。该 getPresident() 方法将确保始终只创建一个总统。 类图和代码 立即模式: public class AmericaPresident { private static final AmericaPresident thePresident = new AmericaPresident(); private AmericaPresident() {} public static AmericaPresident getPresident() { return thePresident; } } thePresident 声明为 final ,因此它将始终包含相同的对象引用。 懒惰模式: public class AmericaPresident { private static AmericaPresident

设计模式——单例模式

大兔子大兔子 提交于 2019-11-30 00:15:06
单例模式 传统的写法 /** * 懒汉模式 */ public class Singleton { private static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } /** * 饿汉模式 */ class SingletonWithHungry { private SingletonWithHungry() { } private SingletonWithHungry instance = new SingletonWithHungry(); public SingletonWithHungry getInstance() { return instance; } } /** * 枚举单例 */ public enum Girlfriend{ GIRLFRIEND; } /** * 静态内部类 */ public class SingleTon{ private SingleTon(){} private static class SingleTonHoler{ private