设计模式之禅学习——单例模式
1、单例模式应该是设计模式最简单的一种了,我认为,单例模式最基本的原理就是创建一个私有的构造函数,然后在该类中就生成一个该类的实例,并且通过一个静态方法返回该实例,那么当其他类应用该类时,使用的始终是一个该类的实例。
2、单例模式分为恶汉式和懒汉式。
3、恶汉式单例通用代码如下:
package com.wang.singletonPattern; /** * 恶汉式单例 * @author HeJW * */ public class Singleton1 { private static final Singleton1 singleton1 = new Singleton1(); private Singleton1(){ System.out.println("创建Singleton1实例"); } /* * 当其他类要使用该类是,通过调用该方法,得到该类的实例,并且得到的永远都是这一个 */ public static Singleton1 getSingleton1(){ return singleton1; } }
4、懒汉式单例代码如下:
package com.wang.singletonPattern; /** * 懒汉式单例 * @author HeJW * */ public class Singleton2 { private static Singleton2 singleton2 = null; private Singleton2(){ System.out.println("创建Singleton2实例"); } //如果不加synchronized关键字,线程不安全 public static synchronized Singleton2 getSingleton2(){ if( singleton2 == null ){ singleton2 = new Singleton2(); } return singleton2; } }
懒汉式单例记得要加synchronized关键字,如果不加synchronized关键字,线程不安全。如果一个A执行到
singleton2 = new Singleton2();
,但还没有获得对象(对象初始化是需要时间的),第二个线程B也在执行,执行到
singleton2 == null
判断,那么线程B得到的判断也为真,于是线程B也创建了一个实例,这样就导致两个线程创建了两个对象,所以线程不安全,只能加上synchronized关键字。
5、单例模式扩展,生成指定数量的实例,代码如下:
package com.wang.singletonPattern; import java.util.ArrayList; import java.util.Random; /** * 单例模式扩展,生成指定数量的实例 * @author HeJW * */ public class SingletonDevelop { //定义最多能生产两个实例 private static int maxNum = 2; //定义一个列表,容纳多有的实例 private static ArrayList<SingletonDevelop> singletonDeveloplist = new ArrayList<SingletonDevelop>(); //产生指定数量的实例对象 static{ for( int i=0; i<maxNum; i++ ){ singletonDeveloplist.add(new SingletonDevelop()); } } private SingletonDevelop(){ System.out.println("创建SingletonDevelop实例"); } //得到随机的SingletonDevelop实例 public static SingletonDevelop SingletonDevelop(){ Random randrom = new Random(); int singletonDevelopNum = randrom.nextInt(maxNum); return singletonDeveloplist.get(singletonDevelopNum); } }
相关推荐
编写一个类LimitInstanceClass,该类最多可以实例化指定个数实例。实例的个数用配置文件InstanceLimit.cfg指定。例如,如果InstanceLimit.cfg的内容为2,则LimitInstanceClass最多可以同时存在2个对象。...
单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...
需要注意的是,单例模式可能会导致程序设计过于紧密耦合,不易于测试和扩展。因此,在使用单例时需谨慎,避免滥用。此外,如果需要依赖注入,可以考虑使用`Dependency Injection`框架来代替硬编码的单例。
单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用...理解并熟练掌握单例模式的实现方式及其适用场景,对于编写高效、可维护的代码具有重要意义。在编程实践中,应根据项目需求选择最适合的实现策略。
单例模式是软件设计模式中的一个经典模式,它在Java编程中被广泛应用。单例模式的核心思想是确保一个类...通过这些代码,你可以亲手运行并观察不同实现方式的效果,进一步理解单例模式的工作原理及其在Java中的应用。
下面将详细阐述单例模式的概念、实现方式及其优缺点。 一、单例模式的概念 单例模式是一种创建型设计模式,它的核心在于限制类的实例化过程,使得类在整个应用生命周期中只能有一个实例。这个实例通常是全局可访问...
通过研磨设计模式之单例模式的资料,你可以深入理解单例模式的原理、实现方式及其优缺点,进一步提升自己的编程技能和设计思维。学习并熟练掌握设计模式,对于成为一名优秀的Java开发者至关重要。
登记式单例模式通常用于类似于Spring框架中的bean管理方式,即在单例类中维护一个容器或注册表,将类名及其对应的实例注册进去,之后可以通过查询注册表来获取相应的单例实例。 ##### 代码示例: ```java import ...
在《Java性能优化》一书中,作者深入探讨了单例模式的各种实现方式及其优化。 1. 最简单的实现方式是使用静态内部类,这种方式实现了延迟加载(lazy initialization),同时也保证了线程安全。如下所示: ```java ...
以上就是单例模式的常见实现方式及其特点。在实际开发中,需要根据项目需求选择合适的实现方式,兼顾性能和安全性。在理解和应用单例模式时,还需要注意其可能带来的副作用,如单例类的扩展困难、测试不便等问题。...
Java单例模式是一种常见的设计模式,它用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式通常用于管理共享资源或者需要频繁创建和销毁的对象,以节省系统资源并提供全局访问点。 单例...
接下来,我们将详细讨论C++中的单例模式及其应用。 ### 单例模式的原理 单例模式的关键在于限制类的实例化过程,只允许类自身创建其唯一实例,并提供一个全局访问点供其他部分使用。这样做的目的是为了保证在多...
根据给定文件的信息,本文将详细解析如何使用Java语言及单例模式来计算并列出一年中的所有周及其对应的时间段,同时也会展示如何获取当前日期及其所在周。 ### 一、单例模式简介 单例模式是一种常用的软件设计模式...
下面将详细介绍书中的部分设计模式及其应用场景。 ### 一、策略模式【Strategy Pattern】 #### 定义 策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。该模式让算法独立于使用它的客户而...
下面我们将逐一探讨这些文件可能涵盖的设计模式及其应用: 1. MarvelousWorks.PracticalPattern_34 可能涉及“工厂模式”。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂类,使得...
让我们深入探讨一下JavaScript中的单例模式及其应用。 首先,单例模式的核心思想是限制类的实例化过程,确保任何时候都只有一个实例存在。这样可以有效地控制资源的使用,减少系统开销,特别是在处理全局资源或者...
例如,`java工厂设计模式.doc`可能详细介绍了这些不同类型的工厂模式及其应用场景,并通过实例展示了如何在Java中实现它们。 接下来是单例模式。单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式在...
下面我们详细探讨一下Java中的单例模式及其重要性。 **单例模式的概念与作用** 单例模式确保了在整个应用程序中,对于特定类的实例,无论何时何地,都只能有一个实例存在。这种模式在需要频繁创建和销毁对象,或者...
通过分析和学习这些源码,你可以更好地理解如何在实际项目中应用简单工厂和单例模式,提高代码的可维护性和可扩展性。同时,熟悉这些设计模式对于提升你的Java开发技能和面试准备都是非常有帮助的。
接下来,我们将深入探讨这些设计模式及其在实际开发中的应用。 首先,简单工厂模式是一种创建型设计模式,它提供一个静态方法来创建对象,而不直接暴露构造函数。这种模式适用于当类的实例化逻辑相对简单且不会频繁...