单例模式

设计模式-单例模式

筅森魡賤 提交于 2020-01-25 00:17:31
定义 百度文库:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 标准定义: Singleton保证一个类仅有一个实例,并提供一个访问它的全局访问点。 UML图 示例 (1.1)定义一个私有的静态的全局变量 public class Singleton { //定义一个私有的静态的全局变量 private static Singleton singleton; } (1.2)设置私有构造函数 public class Singleton { //定义一个私有的静态的全局变量 private static Singleton singleton; /// <summary> /// 设置私有构造函数(外部无法使用new创建实例) /// </summary> private Singleton() { } } (1.3)设置一个全局访问点,静态方法供外部调用 public class Singleton { //定义一个私有的静态的全局变量 private static Singleton singleton; /// <summary> /// 设置私有构造函数

单例模式

扶醉桌前 提交于 2020-01-23 15:34:13
单例模式定义:单利模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;而是它必须自行创建这个实例;三是它必须自行向整个系统这个实例。单例模式是一张创建型模式。单例模式又名单件模式或单态模式。 单例模式的要点是构造函数私有化。 实现代码如下 public class Singleton{ private static Singleton instance = null; private Singleton(){ } public static Singleton getInstance(){ } } 来源: CSDN 作者: codedrinker 链接: https://blog.csdn.net/sunjinbat/article/details/88655372

单例设计模式

二次信任 提交于 2020-01-23 05:01:24
对所有的Java开发者而言,所有项目中最为常见的三个设计模式:工厂设计模式、代理设计模式、单例设计模式。 单例设计模式: 如果一个类中定义有普通方法,那么这些普通方法一定要通过本类的实例化对象你才可以调用。 传统调用: class Single{ public void print(){ System.out.println("单身"); }}class TestDemo{ public static void main(String arg[]){ Single single = new Single(); single.print(); }}运行结果:单身 在本程序中Single是一个普通的类,由于本类并没有进行任何构造方法的定义,所以这个类中会自动生成一个无参的、什么都不做的的构造方法,正是因为如此,我们可以在外部进行无参构造的调用。 但现在相对Single 类做一个修改: class Single{ private Single(){} public void print(){ System.out.println("单身"); }}class TestDemo{ public static void main(String arg[]){ Single single= null; single = new Single(); single.print(); }} 运行结果

详解单例模式六种写法的优缺点

情到浓时终转凉″ 提交于 2020-01-23 03:46:40
前言 单例模式:保证一个类有且仅有一个实例. 通过定义我们可知它是创建型的一种, 也是比较简单的一种 单例模式的使用场景: 频繁的进行创建和销毁的对象、创建对象时消耗过多或者消费资源过多,但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象. 下面主要分析一下单例模式的六种写法, 以及优缺点! 饿汉式(静态常量) 懒汉式(线程不安全) 懒汉式(线程安全) 双重检查 静态内部类 枚举 饿汉式(静态常量) 代码 //饿汉式(静态常量) class Singleton { // 构造器私有 外部不能实例化 private Singleton ( ) { } private final static Singleton instance = new Singleton ( ) ; public static Singleton getInstance ( ) { return instance ; } } 优点 写法简单, 在类装载的时候完成了实例化 避免了线程同步问题 缺点 导致类装载的原因有很多种, 不能达到 lazy loading(懒加载)的效果 有可能造成内存浪费 懒汉式(线程不安全) 代码 //懒汉式 class Singleton { private static Singleton instance ; private Singleton ( ) { } public

单例模式和多例模式(懒汉式和饿汉式)

╄→гoц情女王★ 提交于 2020-01-22 19:35:35
一、什么是单例、多例: 所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 二、单例模式和多例模式说明: 单例模式和多例模式属于对象模式。 单例模式的对象在整个系统中只有一份,多例模式可以有多个实例。 它们都不对外提供构造方法,即构造方法都为私有。 三、单例模式适用场景: 需要生成唯一序列的环境 需要频繁实例化然后销毁的对象。 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 方便资源相互通信的环境 四、举例 1、懒汉式 你用的时候,我再去给你创建对象 class Singleton { private static Singleton single ; private static Singleton ( ) { } public static synchronized Singleton getInstance ( ) { if ( single == null ) single = new Singleton ( ) ; return single ; } } 优点: 第一次调用才初始化,避免浪费内存 缺点: 加锁了执行效率低 2、饿汉式 启动的时候就创建了对象, class SingleObj { //私有变量 private static SingleObj

设计模式之单例模式

萝らか妹 提交于 2020-01-22 17:23:41
以下是我摘自维基百科,我觉得总结的特别好: 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 实现单例模式的思路是: 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。 现在让我们结合代码看看单例模式的思想: class Weight { public: static Weight* GetInstance() { //访问该类唯一实例的全局访问点(静态访问点) if (weight == nullptr) { //当weight指针为nullptr时我们就创建该类的唯一实例

设计模式之单例设计模式

大城市里の小女人 提交于 2020-01-22 17:02:24
单例模式 ,就是只有一个实例对象存在,保证了多线程情况下的线程安全问题。保证一个类仅有一个实例,并提供一个访问它的全局访问点。 创建单例对象的三要素: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 主要应用场景: Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 要求生产唯一序列号。 WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。 实现单列模式的关键 : 私有构造方法 单例模式的七种实现方式: 单例模式 主要分为 饿汉式 和 懒汉式 两种 单列模式主要考虑 实例对象唯一 懒加载 性能问题 1、饿汉式 这是饿汉式的简单实现保证了线程安全,但是浪费内存的开销,没有实现懒加载。 package com . multi . thread . two . design . pattern ; /** * 饿汉式:实现步骤 * 1、私有构造方法 * 2、新建实例对象 * 3、对外提供获取对象的全局访问点 * 保证线程安全, *

设计模式------单例模式

醉酒当歌 提交于 2020-01-22 12:45:38
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 namespace DesignMode { class Singleton { private static Singleton instance; //私有化构造方法,防止外界通过new创建实例 private Singleton() { } public static Singleton GetInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } } 来源: CSDN 作者: 傻子是小傲娇 链接: https://blog.csdn.net/love_phoebe/article/details/104064684

设计模式(单例和简单代理)

不羁岁月 提交于 2020-01-22 09:47:14
设计模式(单例和简单代理) 一、单例(Singleton) 确保一个类只有一个实例,并提供该实例的全局访问点。 Ⅰ 饿汉式 顾名思义,饿汉初始化类时,直接静态加载 SingletonDemo01 类的实例 instance , 不管用到没用到这个实例,都创建出来了 ,所以没有延时加载的优势。 ***评价:**线程不安全的问题主要由于实例化多次才会造成,采取直接实例化不会产生线程不安全问题,但也丢失了延迟实例化带来的节约资源你的好处 /** * 测试饿汉式单例模式 * @author wangqun * */ public class SingletonDemo01 { //类初始化时,立即加载这个对象(没有延时加载的优势!) 由于加载类时天然线程安全! private static SingletonDemo01 instance = new SingletonDemo01 ( ) ; private SingletonDemo01 ( ) { } //方法不用加synchronized 效率高! public static SingletonDemo01 getInstance ( ) { return instance ; } } Ⅱ 懒汉式 类初始化时,没有创建对象,真正使用的时候才创建! 评价: 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if

单例模式

a 夏天 提交于 2020-01-21 02:14:50
单例模式 单例模式的应用场景 单例模式是确保一个类在任何情况下都绝对只有一个实例,并且提供一个全局访问点。单例模式是创建型模式。单例模式的应用非常广泛。在J2EE标准的,ServletContext、ServletContextConfig等;在Spring框架中ApplicationContext;数据库连接池都是单例模式。 单例模式的特点:构造函数私有,全局只有一个实例 恶汉式单例 恶汉式单例是在类加载的时候就立即初始化,并且创建单例对象。绝对线程安全,在线程还没有出现之前就已经实例化了,不可能存在线程安全的问题 **优点:**没有加任何的锁、执行效率比较高、用户体验比懒汉式更好 **缺点:**类加载的时候就初始化,不管是不是用都会占用内存空间。 Spring中IOC容器ApplicationContext就是恶汉式单例。 恶汉式单例实现代码: 静态变量实现: package com.zyk.hungry; public class HungrySingleton { private static final HungrySingleton instance = new HungrySingleton(); private HungrySingleton() { } public static HungrySingleton getInstance() { return