单例模式

设计模式之单例模式

本秂侑毒 提交于 2019-12-03 12:12:10
网上讲解单例模式的文章已经很多了,但是没有我的原创,所以要写一个. 单例模式是设计模式中的经典之一,主要的作用就是保证只有一个实例被创建. 单例模式分为饥汉模式和饱汉模式,饥汉模式是指在一开始就创建实例;饱汉模式是指在需要时才创建实例 以下是饱汉模式: 1 public class SingleTon { 2 public static SingleTon instance = null; 3 4 public SingleTon(){}; 5 6 public static SingleTon getInstance() { 7 if(instance == null) { 8 instance = new SingleTon(); 9 } 10 return instance; 11 } 12 13 } 饥汉模式: 1 public class SingleTon { 2 public SingleTon(){}; 3 public static SingleTon instance = new SingleTon(); 4 public static SingleTon getInstance() { 5 return instance; 6 } 7 } 总结来说:创建单例模式主要有两个个步骤: 1.构造方法私有化 2.提供返回实例的静态方法

.NET设计模式-单例模式

末鹿安然 提交于 2019-12-03 09:43:11
Singleton( 单例模式 ) 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 public class Singleon {   // 创建私有对象,保证只有一个对象 private static volatile Singleon _instance = null; // 锁 private static object _singleonLock = new object(); /// <summary> /// 创建唯一实例 /// </summary> /// <returns></returns> public static Singleon CreateInstance() { if (_instance == null) // 确保实例已被创建,不在做不必要的动作了。 { lock (_singleonLock) // 多线程中确保单一实例 {   if (_instance == null) {   _instance = new Singleon(); } } } return _instance; } } 来源: https://www.cnblogs.com/youny/p/11785943.html

不管你年底换不换工作,了解下单例模式

女生的网名这么多〃 提交于 2019-12-03 07:36:47
1. 单例模式 什么是单例模式?简言之就是确保定义为单例模式的类在程序中有且只有一个实例。单例模式的特点: 只有一个实例 (只能有一个对象被创建) 自我实例化(类构造器私有) 对外提供获取实例的静态方法 2.单例模式的实现 常见的单例模式实现方式有五种: 2.1. 懒汉式 懒汉式(一般也称之为 饱汉式),具体代码实现如下: public class Singleton { /** * 自我实例化 */ private static Singleton singleton; /** * 构造方法私有 */ private Singleton() { System.out.println("创建单例实例..."); } /** * 对外提供获取实例的静态方法 */ public static Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } } 从代码实现中可以看到,实例并不是在一开始就是初始化的,而是在调用 **getInstance()**方法后才会产生单例,这种模式延迟初始化实例,但它并非是线程安全的。 public class SingleTonTest { /** * 多线程模式下测试懒汉模式是否线程安全 * *

不管你年底换不换工作,了解下单例模式

为君一笑 提交于 2019-12-03 07:27:23
1. 单例模式 什么是单例模式?简言之就是确保定义为单例模式的类在程序中有且只有一个实例。单例模式的特点: 只有一个实例 (只能有一个对象被创建) 自我实例化(类构造器私有) 对外提供获取实例的静态方法 2.单例模式的实现 常见的单例模式实现方式有五种: 2.1. 懒汉式 懒汉式(一般也称之为 饱汉式),具体代码实现如下: public class Singleton { /** * 自我实例化 */ private static Singleton singleton; /** * 构造方法私有 */ private Singleton() { System.out.println("创建单例实例..."); } /** * 对外提供获取实例的静态方法 */ public static Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } } 从代码实现中可以看到,实例并不是在一开始就是初始化的,而是在调用 **getInstance()**方法后才会产生单例,这种模式延迟初始化实例,但它并非是线程安全的。 public class SingleTonTest { /** * 多线程模式下测试懒汉模式是否线程安全 * *

设计模式

丶灬走出姿态 提交于 2019-12-03 07:07:41
设计模式有哪些? 单例模式:单例模式对实例个数的控制并节约系统资源.在它的核心结构中只包含一个被称为单例类的特殊类,通过构造函数私有化和静态块以及提供对外访问的接口来实现. 应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 工厂模式:工厂模式主要是为创建对象提供了接口 应用场景如下:在编码时不能预见需要创建哪种类的实例;系统不应依赖于产品类实例如何被创建、组合和表达的细节。 观察者模式:定义了对象间一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新 应用场景如下:对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变;对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节; (实现参考https://www.jianshu.com/p/12a009f8d016) 来源: https://www.cnblogs.com/yh2two/p/11782347.html

单例模式

扶醉桌前 提交于 2019-12-03 04:49:20
今天新学了一种设计模式,叫做单例模式,具体是干啥用的,那些地方能用到他,其实我也不知道。好了,话不多说,直接上干货! 单例模式,顾名思义,单个实例对象的模式。单例模式一共分为六种写法,接下来一一为大家介绍。 第一个上场的小伙伴是我们的恶汉单例。恶汉,意思可能就是非常饥饿吧,所以在一开始就创建了一个实例对象来喂饱他。 关键点:() 1)私有构造函数 2)静态私有成员--在类加载时已初始化 3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回 优缺点:因为在类加载时就创建了实例,所以加载速度慢,但是获取对象速度快。 代码如下: 接下来是懒汉单例。懒汉单例,特别懒,你用他他才创建实例对象。 类加载速度较快,但是获取实例对象速度较慢。代码如下: 关键点: 1)构造函数定义为私有----不能在别的类中来获取该类的对象,只能在类自身中得到自己的对象 2)成员变量为static的,没有初始化----类加载快,但访问类的唯一实例慢,static保证在自身类中获取自身对象 3)公开访问点getInstance: public和synchronized的-----public保证对外公开,同步保证多线程时的正确性(因为类变量不是在加载时初始化的) 静态内部类单例,代码如下: 静态内部类的优点是:外部类加载时并不需要立即加载内部类

单例模式的懒汉饿汉

旧巷老猫 提交于 2019-12-03 03:01:21
单例模式的三个特点:   1. 私有构造方法;   2. 内部创建静态对象;   3. 提供静态方法返回该静态对象; 单例设计模式主要有两种实现方法:饿汉式和懒汉式   饿汉式单例:在定义开始,便实例化自己。 class Singleton0 { //构造方法私有化 private Singleton0() { } //内部创建静态对象并实例化 private static Singleton0 s=new Singleton0(); //提供静态方法返回该静态对象 public static Singleton0 getsingle() { return s; } }   懒汉式单例:在第一次调用时实例化自己。 class Singleton1{ //构造方法私有化 private Singleton1() { } //内部创建静态对象 public static Singleton1 single=null; //提供静态方法返回该静态对象 public static Singleton1 getsingle() { //静态对象实例化 single=new Singleton1(); return single; } }   懒汉式与饿汉式的区别:     1. 线程安全:       饿汉式天生线程安全,可以直接用于多线程而不会出现问题。       懒汉式本身非线程安全

单例模式

ⅰ亾dé卋堺 提交于 2019-12-03 01:24:49
ps:类只要加括号就会生成一个新的对象,无论参数是否相同,单例模式排除在外. class Demo: pass obj1 = Demo() obj2 = Demo() print(id(obj1)) # 1594519955888 print(id(obj2)) # 1594519955832 单例: 多次调用类拿到的是同一个对象 单例的实现: <1>基于classmethod class Mysql(object): _instance = None def __init__(self, host, port): self.host = host self.port = port @classmethod def singelton(cls): if not cls._instance: cls._instance = cls('127.0.0.1',8080) obj1 = Mysql.singelton() obj2 = Mysql.singelton() obj3 = Mysql('168.192.1.1',8088) print(id(obj1), id(obj2), id(obj3)) # 1731962064 1731962064 1736639656680 <2>基于装饰器 # 基于装饰器 本质:会将紧挨着它的变量名当做参数传入 def singelton(cls)

三种单例模式

匿名 (未验证) 提交于 2019-12-03 00:39:02
1.什么是单例模式? 基于某种方式是实例化多次得到的实例是同一个。 2.为何用单例模式? 当实例化多次得到的对象中存放的属性都是一样的情况,应该将多个对象指向同一个内存,即同一个实例。节省内存。 单例模式有三种实现方式,下面一一讲述。 单例模式实现方式一:在类中通过if判断,如果实例化过就直接返回之前实例化的对象,不会再去产生一个内存空间 import settings class Mysql: __instance=None def __init__(self,ip,port): self.ip=ip self.port=port print(self) @classmethod def from_conf(cls): # 类作为参数自动传入 cls = Mysql if cls.__instance is None: # Mysql.__instance 初始为None cls.__instance=cls(settings.IP,settings.PORT) # Mysql(IP,PORT) print(cls.__instance) # 实例化过一次就不会再去执行if下的语句了,直接return cls.__instance return cls.__instance # 不是空的直接返回,可以保证返回的是同一个实例 # obj=Mysql(‘1.1.1.10‘,3306)

设计模式之单例模式

匿名 (未验证) 提交于 2019-12-03 00:29:01
设计模式之单例模式( Singleton Pattern ) 一、概述 单例模式是最简单的设计模式之一。此设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式包含一个单一的类,该类负责创建自己的对象,同时确保 该类仅有一个实例 。并且提供了一个访问其对象的 全局访问点 ,可以直接访问,不需要实例化该类的对象。 总结: 单例模式中的类只能有一个实例。 该实例只能由自己创建,不可通过外部创建。 该类必须给外部对象一个访问点 二、应用实例 1 、一个党只能有一个主席。 2 、 Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3 、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 4、 一个系统只能有一个窗口管理器或文件系统 5.、 一个系统只能有一个计时工具或 ID( 序号 ) 生成器 三、实现方式 1. 构造函数私有化 ①类外不可创建对象 ②构造函数私有化的函数不能被继承 2. 提供静态方法创建成员 构造函数私有化-->类外不可创建对象-->初始时类外不能调用类内非静态公有函数-->在类内创建静态函数用来创建对象 四、类图 类图说明: instance 私有静态指针变量,用于存储唯一对象的指针