摘要:单例模式是一种常见的设计模式。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数, 有利于Java垃圾回收(garbage collection)。
一、单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:
1、控制资源的使用,通过线程同步来控制资源的并发访问;
2、控制实例产生的数量,达到节约资源的目的。
3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
二、常见的单例模式有两种:懒汉式单例、饿汉式单例。
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
1)饿汉式单例
在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
package com.zad.my_encapsulation_single; /** * 单例模式-饿汉式 * 1、构造器私有化 * 2、提供私有的静态属性 ,创建该对象 * 3、提供公共的静态方法来访问该引用 * @author zhongaidong */ public class EagerSingleton { // 2、提供私有的静态属性,在类加载的时候就创建该单例对象 private static EagerSingleton eager = new EagerSingleton(); // 1、构造器私有化,内部创建对象,避免外部创建实例 private EagerSingleton() { } // 3、提供公共的静态方法来访问该引用,返回此类的唯一实例. public static EagerSingleton getInstance() { return eager; } }
2)懒汉式单例
在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
/** * 单例模式-懒汉式 * 1、构造器私有化 * 2、提供私有的静态属性 * 3、提供公共的静态方法来访问该引用 * @author zhongaidong */ public class LazySingleton { // 2、提供私有的静态属性,加载时候不做初始化 private static LazySingleton lazy; // 1、构造器私有化,内部创建对象,避免外部创建实例 private LazySingleton() { } // 3、提供公共的静态方法来访问该引用。 public static LazySingleton getInstance() { if (lazy == null) { lazy = new LazySingleton(); } return lazy; } }
三、如何使用单例对象
/** * 如何使用单例对象。 * * @author zhongaidong */ public class App { public static void main(String[] args) { // EagerSingleton eager =new EagerSingleton(); // 不能这样调用。 EagerSingleton eager = EagerSingleton.getInstance(); System.out.println(eager); System.out.println(EagerSingleton.getInstance()); LazySingleton lazy = LazySingleton.getInstance(); System.out.println(lazy); System.out.println(LazySingleton.getInstance()); } }
相关推荐
实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...
单例设计模式又分为两种方式,懒汉式和饿汉式。 懒汉式单例 懒汉式单例模式是指只有当调用getInstance的时候,才会初始化这个单例。这种方法可以保证线程安全,又减轻了资源加载和性能上的负担。下面是一个懒汉式...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...
在软件设计模式中,单例模式是一种常用的模式,它的核心思想是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。这样的设计可以避免过多的实例化,减少资源的浪费,尤其是在需要频繁交互或者共享资源的...
单例模式是设计模式中的一种常见模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,这种模式常用于控制资源的消耗,比如数据库连接、线程池等,避免频繁创建和销毁对象带来的性能开销...
单例设计模式又分为两种方式,懒汉式和饿汉式。 懒汉式单例是一种延迟加载的单例模式,它只有当调用 getInstance 的时候,才会初始化这个单例。这种模式的优点是可以减少资源的加载和性能上的负担,但是它需要使用 ...
Java设计模式之单例模式实例详解【懒汉式与饿汉式】 单例模式是Java设计模式中的一种,主要用于控制对象的实例化,确保整个应用程序中只有一个对象实例,并提供了一个全局的访问点。单例模式的主要优点是能够避免...
单例设计模式是一种常用的设计模式,其主要目的是确保一个类只有一个实例,并且提供一个全局访问点。这种模式在Java中有两种常见的实现方式:饿汉式和懒汉式。 1. 饿汉式单例: 饿汉式单例在类加载时就完成了初始化...
"QT_C++单例模式懒汉+饿汉.rar"是一个压缩包,包含了关于C++在QT环境下实现单例模式的实例,分为懒汉式和饿汉式两种实现方式。 首先,我们来看一下单例模式的基本原理。单例模式通常用于那些需要频繁实例化然后销毁...
Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...
饿汉式单例设计模式 饿汉式在类加载时即创建单例对象,因此在类加载阶段就已经完成了初始化。由于类加载是线程安全的,所以饿汉式天生就是线程安全的。它的实现代码如下: ```java public class Singleton { ...
单例模式的核心在于控制类的实例化过程,常见的实现方式有懒汉式、饿汉式和双重检查锁定(DCL)等。懒汉式是在类被加载时并不创建实例,而是在第一次调用getInstance方法时才创建;饿汉式则是在类加载时就创建实例,...
总的来说,单例模式是一种常见的设计模式,懒汉式单例模式则是其中一种实现策略,它的主要特点是延迟加载和线程安全。在选择单例模式实现时,开发者需要根据具体需求考虑性能、线程安全以及代码简洁性等因素。
Java 单例设计模式主要分为两种实现方式:饿汉式和懒汉式。这两种方式都是为了确保一个类只有一个实例,并且提供全局访问点。 **饿汉式**: 饿汉式单例在类加载时就完成了实例化,因此是静态常量的方式,确保了线程...
总结,Java单例设计模式通过饿汉式和懒汉式实现,饿汉式在类加载时创建实例,适用于不需要延迟加载的情况;懒汉式在首次调用时创建,但在多线程环境下需要额外的同步措施以保证线程安全。在实际应用中,应根据具体...
单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及双重检查锁定(DCL)等。 1. 懒汉式:懒汉式是在第一次使用时才创建单例对象,以延迟加载提高效率。但是,如果在多线程环境下,没有正确处理同步问题,可能...
在Java中,单例模式通常有两种实现方式:饿汉式和懒汉式。 1. 饿汉式: 饿汉式是在类加载时就完成了初始化,因此它是线程安全的。代码如下: ```java public class Singleton { private static final Singleton ...
细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解
单例设计模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在Java中,单例模式有两种常见的实现方式:饿汉式和懒汉式。 1. **饿汉式**: 饿汉式单例在类加载时即创建了...
单例模式主要有懒汉式和饿汉式两种实现,饿汉式不会有线程安全的问题,但是提前构造对象占用了一定的资源,如果对内存要求较低的场景可以使用饿汉式实现;懒汉式应使用DCL机制来避免多线程竞争资源的问题,并且懒汉...