单例模式

单例模式中的懒汉模式及饿汉模式

倖福魔咒の 提交于 2019-12-04 23:31:44
定义:单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 关键代码:构造函数是私有的。 优点: 1. 在内存里只有一个实例,减少了内存的开销 2. 避免对资源的多重占用(比如写文件操作) 饿汉模式:加载类时慢,运行时获取对象快,线程安全; public class Demo { private static Demo demo = new Demo (); //饿汉模式,类初始化时直接创建 public Demo getInstance() { return demo } } 懒汉模式:加载类时快,运行时获取对象慢,线程不安全; public class Demo { private Demo demo public synchronized Demo getInstance() { //懒汉模式,需要的时候再创建 if(demo == null) { demo= new Demo(); } return demo; } } 来源: https://www.cnblogs.com/BruceV/p/11888462.html

.NET单例模式快速学习应用

我与影子孤独终老i 提交于 2019-12-04 23:27:11
单例模式属于设计模式中最简单的一个模式,在实际应用中也非常广泛,但可能是受到各类教程的影响,看到很多实现方式仍然沿用Java的那一套,其实在.NET中可以用更简洁的实现方式。 一、知识点介绍 核心目标:为了项目各处调用的都是同一个实例对象,从而实现资源共享。例如环境变量。 常见的实现方式:饿汉模式、懒汉模式、双锁模式 二、实现方式 /// <summary> /// 饿汉模式,每次都加载会造成资源浪费 /// </summary> public class EagerSingleton { public static Demo Instance { get; } = new Demo(); } /// <summary> /// 懒汉模式,适用于没有多线程的简单应用 /// </summary> public class LazySingleton { private static Demo _instance = null; public static Demo Instance { get { if (_instance == null) _instance = new Demo(); return _instance; } } } /// <summary> /// 线程安全 /// </summary> public class ThreadSafeSingleton {

单例模式

血红的双手。 提交于 2019-12-04 20:51:07
--什么是单例模式? --使用单例的应用场景? --有哪几种单例模式?优缺点? --单例模式的选择 定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 应用场景 在应用场景中,某类只要求生成一个对象的时候,如一个班中的班长、每个人的身份证号等。 当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如 Web 中的配置对象、数据库的连接池等。 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等。 五种单例模式 1.饿汉式 类一旦加载就创建一个单例,保证在调用 getInstance 方法之前单例已经存在了。 public class HungrySingleton { private static final HungrySingleton instance =new HungrySingleton(); private HungrySingleton(){} public static HungrySingleton getInstance(){ return instance; } } 以空间换时间,线程安全。 2.懒汉式 类加载时没有生成单例,只有当第一次调用getInstance方法时才去创建这个单例。 public class LazySingleton { private

设计模式--单例模式

让人想犯罪 __ 提交于 2019-12-04 20:19:21
设计模式--单例模式 1、单例模式   保证一个类仅有一个实例,并提供一个访问它的全局访问点 2、单例模式的结构 角色      单例类(Singleton): 只可以创建出一个实例 类图:     3、单例模式举例 Singleton.java package com.nick.pattern.singleton; /** * 饿汉式单例模式 * @author nick */ public class Singleton {   //JVM加载Singleton时就创建instance对象  private static Singleton instance = new Singleton();   private Singleton(){     //设置构造方法的权限为private   }  public static Singleton getInstance() {     return instance; //为外部类提供获得instance对象的方法  } public void say(){     System.out.println("单例模式1");  } } Singleton2.java package com.nick.pattern.singleton; /** * 懒汉式单例模式 * @author nick */ public class

设计模式--单例模式

喜欢而已 提交于 2019-12-04 20:18:04
设计模式--单例模式 1、单例模式   保证一个类仅有一个实例,并提供一个访问它的全局访问点 2、单例模式的结构 角色 单例类(Singleton):只可以创建出一个实例 类图: 3、单例模式举例 Singleton.java 1 package com.nick.pattern.singleton; 2 /** 3 * 饿汉式单例模式 4 * @author nick 5 */ 6 public class Singleton { 7 ​ 8 //JVM加载Singleton时就创建instance对象 9 private static Singleton instance = new Singleton(); 10 11 private Singleton(){ 12 //设置构造方法的权限为private 13 } 14 15 public static Singleton getInstance() { 16 return instance; //为外部类提供获得instance对象的方法 17 } 18 19 public void say(){ 20 System.out.println("单例模式1"); 21 } 22 } Singleton2.java package com.nick.pattern.singleton; /** 懒汉式单例模式 @author

单例模式

走远了吗. 提交于 2019-12-04 17:45:45
题目描述: 设计一个类,我们只能生成该类的一个实例 考察点 对单例模式的理解 考察对 Java 基础语法的理解,如静态构造器 对多线程的理解 概念解读 懒汉式 懒汉式是适合单线程,多线程操作需要加锁,关键字(Synchronized),如果不加会导致对类的访问时线程不安全的,不能保证是单例实现 饿汉式 饿汉式是线程安全的,在类创建的本身就已经实例化好一个静态对象供系统调用,不在改变 区别 懒汉式是延迟加载,他在需要的时候才创建对象。而饿汉式是类创建的时候就进行加载了 优缺点 懒汉式优点是延迟加载,不过需要考虑线程问题 饿汉式优点是用法简单,但是需要考虑效率问题,如果在工厂模式中一下子实例化这么多对象,消耗估计就很大了。 代码实现 懒汉式线程不安全 package club.gclmit.groud.interviews.singleton; /** * <p> * 题目描述: * 设计一个类,我们只能生成该类的一个实例 * * </p> * * @author: gclm * @date: 2019/11/15 10:15 * @version: V1.0 * @since 1.8 */ public class Singleton1 { /** * 懒汉式线程不安全单例模式 * * 实现方法: * * 1. 私有化构造函数 * 2. 设置静态实例,判断私有的 Singleton

单例模式

拜拜、爱过 提交于 2019-12-04 17:35:35
使用单例模式的目的:单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。 1.首先为了咱不每一个需要单例的类都去写一遍单例,所以咱通过c#无敌的泛型来写一个单例的实现过程方法: //单例模式 中间商 public class Singleton<T> where T : new() //where T : new()为泛型约束,通俗来说就是确保T类型是可以被new的 {   private static T _instance; //私有的T类型的静态变量   public static T GetInstance() //获取实例的函数   {     if (_instance == null) //判断实例是否已存在     {       _instance = new T(); //不存在则创建新的实例     }     return _instance; //返回实例   } } 2.当咱们某个类需要单例的时候就可以继承中间商来进行单例了 1 public class SingLetonDemo : Singleton<SingLetonDemo> 2 { 3 public void SingLetonFun() 4 { 5 Console.WriteLine("SingLetonFun2

三、单例模式

亡梦爱人 提交于 2019-12-04 17:29:35
单例模式 前言 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式的几种实现方式 【1】懒汉式(线程不安全) public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。 这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。 【2】懒汉式(线程安全) public class Singleton {

PHP pdo单例模式连接数据库

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-04 15:27:46
PHP pdo单例模式连接数据库 <pre> <?php class Db { private static $pdo; public static function getPdo () { var_dump(self::$pdo); echo '</br>'; if ( self::$pdo == null ) { $host = 'localhost'; $user = 'root'; $pwd = ''; $dbname = 'wangzhan'; $dsn = "mysql:host=$host;dbname=$dbname;port=3306"; $pdo = new PDO ( $dsn, $user, $pwd ); $pdo->query('set names utf8;'); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); self::$pdo = $pdo; } return self::$pdo; } public static function getStmt ( $sql ) { $pdo = self::getPdo (); return $pdo -> prepare

JAVA_单例设计模式

一世执手 提交于 2019-12-04 15:27:42
单例设计模式是指:实现某个类在内存中 只有唯一一个对象 的设计模式。分为饿汉式和懒汉式模式: 想要一个工程在运行的时候,某个类在内存中只有一个唯一的对象,那么,要保证: 首先,其他类不能创建该对象--------------------------该对象所属类的构造方法为private修饰(就不能在其他类里面创建本类对象了) 其次,该对象要可以被其他类访问,那么只能在该对象所属类中创建一个该对象 --------------------------在该类中定义一个private static 修饰的本类对象 最后,必须在这个类里面提供访问方法,以便其他类可以访问--------------------------------------在该类中定义一个public static 修饰的,返回值类型为本类引用 的方法 1. 饿汉式设计模式: class singleColumn{ private singleColumn(){} private static singleColumn targetObject = new singleColumn(); public static singleColumn requestMethod (){ return targetObject; } } class mainClass{ public static void main(String