单例模式

python Singleton 模式

筅森魡賤 提交于 2020-12-17 15:36:16
Singleton 模式,中文既为 单实例模式 。 一、代码示例 看一下普通的类: class Normal(object): _instance = [] config = '' def set(self,value): self.config = value def get(self): return self.confg if __name__ == '__main__': s1 = Normal () s1.set('s1') s2 = Normal() s2.set('s2') print id(s1) print id(s2) print s1.get() print s2.get() 运行结果 : ubuntu@yee:/tmp$ python t.py 139782948272976 139782948273040 s1 s2 可以看到,代码中生成了两个实例,每个实例都拥有自己的内存空间。 接下来看单实例的代码示例: class Singleton(object): _instance = [] config = '' def __new__(cls,*args,**kwargs): if not cls._instance: cls._instance = super(Singleton,cls).__new__(cls,*args,**kwargs)

设计模式 单例模式

[亡魂溺海] 提交于 2020-10-29 07:14:32
继续设计模式,这个模式用得应该很频繁啊,而且也比较简单,如果现在你还不能纸笔随手写个单例出来,你就得加油了哈~ 直接介绍几种线程安全的且我觉得还比较不错的方式: 1、是不是号称恶汉,就是类加载就初始化了 package com.zhy.pattern.singlton; public class Singleton { private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance ; } } 2、懒汉,我喜欢这种,需要双重判断 package com.zhy.pattern.singlton; public class Singleton02 { private static Singleton02 instance; public static Singleton02 getInstance() { if (instance == null) { synchronized (Singleton02.class) { if (instance == null) { instance = new Singleton02(); } } } return instance; } } 3、使用Java的枚举,还是很推荐的

设计模式-单例模式JAVA实现

半世苍凉 提交于 2020-04-08 08:40:13
单例模式其实是一种面向底层的开发模式,业务里能用到的环境不是很多。这里权且以项目启动时获取仓库信息做示例。 一,饿汉模式,在项目一启动的时候就将所需要的对象实例化出来。虽然传说中可能会占用内存不一定会用到,但实际上写一个不会被用到的例的可能性极小,不过不排除一些业务类可能会因为业务的变更迁移而被废掉,这么看来还是有些道理的。 饿汉式的单例模式是线程安全的,因为在发起多线程之前这个对象就已经存在了 package Singleton; /** 单例模式,饿汉式 @author zhousjmas@hotmail.com */ public class WmsSingleton { //只在这里创建一次,是线程安全的 private static WmsSingleton singleton = new WmsSingleton(); private WmsSingleton() {} public static WmsSingleton getInstance() { System.out.println("获取对象前对象信息:"+singleton); return singleton; } } 一般的懒汉式不一定线程安全,所谓的线程安全,简略来讲只要你要对类的静态常量有修改的动作,那就可能会涉及到非线程安全 package Singleton; /** 单例模式,懒汉式

设计模式-单例模式JAVA实现

六月ゝ 毕业季﹏ 提交于 2020-04-08 08:38:26
单例模式其实是一种面向底层的开发模式,业务里能用到的环境不是很多。这里权且以项目启动时获取仓库信息做示例。 一,饿汉模式,在项目一启动的时候就将所需要的对象实例化出来。虽然传说中可能会占用内存不一定会用到,但实际上写一个不会被用到的例的可能性极小,不过不排除一些业务类可能会因为业务的变更迁移而被废掉,这么看来还是有些道理的。 饿汉式的单例模式是线程安全的,因为在发起多线程之前这个对象就已经存在了 package Singleton; /** 单例模式,饿汉式 @author zhousjmas@hotmail.com */ public class WmsSingleton { //只在这里创建一次,是线程安全的 private static WmsSingleton singleton = new WmsSingleton(); private WmsSingleton() {} public static WmsSingleton getInstance() { System.out.println("获取对象前对象信息:"+singleton); return singleton; } } 一般的懒汉式不一定线程安全,所谓的线程安全,简略来讲只要你要对类的静态常量有修改的动作,那就可能会涉及到非线程安全 package Singleton; /** 单例模式,懒汉式

设计模式-单例模式JAVA实现

杀马特。学长 韩版系。学妹 提交于 2020-04-08 08:38:04
单例模式其实是一种面向底层的开发模式,业务里能用到的环境不是很多。这里权且以项目启动时获取仓库信息做示例。 一,饿汉模式,在项目一启动的时候就将所需要的对象实例化出来。虽然传说中可能会占用内存不一定会用到,但实际上写一个不会被用到的例的可能性极小,不过不排除一些业务类可能会因为业务的变更迁移而被废掉,这么看来还是有些道理的。 饿汉式的单例模式是线程安全的,因为在发起多线程之前这个对象就已经存在了 package Singleton; /** 单例模式,饿汉式 @author zhousjmas@hotmail.com */ public class WmsSingleton { //只在这里创建一次,是线程安全的 private static WmsSingleton singleton = new WmsSingleton(); private WmsSingleton() {} public static WmsSingleton getInstance() { System.out.println("获取对象前对象信息:"+singleton); return singleton; } } 一般的懒汉式不一定线程安全,所谓的线程安全,简略来讲只要你要对类的静态常量有修改的动作,那就可能会涉及到非线程安全 package Singleton; /** 单例模式,懒汉式

创建型模式之单例模式

梦想的初衷 提交于 2020-04-06 16:23:12
1 概述 单例模式 应该是最简单,同时又是最复杂的一种 创建型模式 。因为大家都知道这个模式:无非就是保证某个对象在系统中只存在 一个实例 。然而想要真正实现一个完美的 单例模式 ,却不简单。 2 单例模式 一般 单例模式 的实现,都需要包含两个步骤: 将类的构造函数私有化。 提供一个 public 的方法,以供外界获取唯一的实例。 下面将一一介绍 单例模式 的各种实现方式。 3 案例 3.1 注册表式 提供一个 注册表 类,来维护所有 单例 的实例 public class Test { public static void main(String[] args) { SampleClass singleton1 = Registry.getInstance(SampleClass.class); SampleClass singleton2 = Registry.getInstance(SampleClass.class); System.out.println("Registry singleton instance1: " + singleton1.hashCode()); System.out.println("Registry singleton instance2: " + singleton2.hashCode()); System.out.println("We

单例的创建以及常见的几种实现模式

霸气de小男生 提交于 2020-04-06 02:42:10
单例是用来干嘛的? 1.一种设计模式, 2.一般都是资源类,如数据库连接池等, 3.但是要保证一个类仅有一个实例,并提供一个访问它的全局访问点。(只能提供私有的构造器,即保证不能随意创建该类的实例。) 4.单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一一个实例。 在程序运行中只能被创建一次,关键在于怎么保证这个类只能被创建一次,其实这个时候就涉及到线程安全问题了 简单的两种实现方式: 饿汉式: /** 单例模式 饿汉式 */ public class Simple01 { //类初始化时,立即创建对象 private static Simple01 s=new Simple01(); private Simple01(){ } //方法没有同步,调用效率高 public static Simple01 getInstance(){ return s; } } 懒汉式 /** 单例模式 懒汉式 */ public class Simple02 { //调用时再创建 private static Simple02 s; private Simple02(){} //线程同步 public static synchronized Simple02 getInstance(){ if(s==null){ s=new Simple02(); } return s;

C++单例模式

有些话、适合烂在心里 提交于 2020-04-06 02:37:05
单例模式是任何面向对象语言绕不过的,单例模式是很有必要的,接下来我用最朴素的语言来解释和记录单例模式的学习。 什么是单例模式? 单例模式就是一个类只能被实例化一次 ,更准确的说是 只能有一个实例化的对象的类。 创建一个单例模式的类(初想) 一个类只能有一个实例化的对象,那么这个类就要禁止别人new出来,或者通过直接定义一个对象出来 class CAR { public: CAR(){} ~CAR(){} }; CAR a; CAR *b = new CAR; 很明显这样的类可以被程序员用上面这两种方式实例化。那么考虑,如何禁止用上面的这两种方式实例化一个类呢? 如果把构造函数私有化,很明显上面这两种方法都会默认的去调用构造函数,当构造函数是private或者protected时,构造函数将无法从外部调用。 class CSingleton { private: CSingleton() { } }; int main() { CSingleton t; CSingleton *tt = new CSingleton; } 上面的代码选择了这样实例化类,很明显编译器会报错,因为私有化的构造函数无法被外部调用 error: ‘CSingleton::CSingleton()’ is private 既然构造函数是私有了,那么他就只能被类内部的成员函数调用

设计模式

懵懂的女人 提交于 2020-04-05 19:31:02
单例设计模式: 其定义是单例对象的类只能允许一个实例存在 深入理解设计模式(一):单例模式 目录 一、什么是单例模式 二、单例模式的应用场景 三、单例模式的优缺点 四、单例模式的实现 五、总结 正文 本文首先概述了单例模式,揭示了单例模式的应用场景和优缺点,最后我们给出了单例模式的几种实现方式及注意事项。 回到顶部 一、什么是单例模式 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 单例的实现主要是通过以下两个步骤 : 将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例; 在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。 回到顶部 二、单例模式的应用场景 举一个小例子,在我们的windows桌面上,我们打开了一个回收站,当我们试图再次打开一个新的回收站时

单例设计模式

岁酱吖の 提交于 2020-04-04 09:20:54
@ 目录 一、概念叙述 二、先看个问题 三、单例模式实现 (一)、饿汉模式 (二)、懒汉模式 (三)、双重校验锁 一、概念叙述 单例模式是一种常用的软件设计模式,使用单例模式,可以保证为一类只生成唯一的实例对象。也就是说,整个程序空间中,该类只存在一个实例对象。 二、先看个问题 我们通常在实例化对象是,通常是通过去new构造器方法获取一个类的实例化对象。这样就会出现一个问题:那就是每次创建的实例对象的内存地址都不一样。 public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 接下来单例模式就可以解决这个问题。 三、单例模式实现 (一)、饿汉模式 package 单例模式; /** * 饿汉模式 * 1、初始化类对象 * 2、私有化构造器 * 3、通过静态方法还会 */ public class Student { // 初始化对象,当类加载时,就已经把student对象加载到了内存中 private static Student student = new Student(); private String name; // 第一步私有化构造器