`
WilliamLiu
  • 浏览: 27090 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

设计模式之单例(Singleton)模式

阅读更多

      一、什么单例(Singleton)模式

      单例(Singleton)模式属于GoF《设计模式》中的创建型模式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供一个访问它的全局访问点,用于访问该实例。这个类称为单例类。

 

      二、单例模式的要点

      显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例,因此,若某个类满足以上单例模式的三个要点,则该类就是单例模式了。

 

      三、单例模式的实现

      从单例模式的要点可以看出,要实现单例模式只要满足以上三个要点即可,则该模式的实现方式有很多种,现在只列出最常用的实现方法,如下:

package com.huawei.designpattern.singleton;

/**
 * 单例模式
 * @author William liu
 *
 */
public class Singleton {

	//声明一个private static的对象,供newInstance方法使用
	private static Singleton singleton;

	/**
	 * 将构造函数改为private,
	 * 则该类不能被其他类实例化,只能被自身实例化
	 */
	private Singleton() {

	}

	/**
	 * 将该方法作为访问该单例类的一个全局访问点,
	 * 同时在该方法类将自身实例化
	 * @return Singleton
	 */
	public static Singleton newInstance() {
		if (singleton == null) {
			synchronized (Singleton.class) {
				if (singleton == null) {
					singleton = new Singleton();
				}
			}
		}
		return singleton;
	}
	
	//Other methods omitted
}

      在以上Java代码中,简单实现了一个单例模式。首先、通过将构造函数改为private,让其他类不能实例化该类。其次、将实例化类的工作放到了该类的newInstance方法中,同时让该方法为public static的,目的是让其他类必须通过类名调用该方法实例化或访问该类,满足了单例模式要点的第三点。第三、在newInstance方法中,第一个if (singleton == null)限制了该类只能创建一个实例,满足了单例模式要点的第一点。第四、在newInstance方法中的singleton = new Singleton();代码将自身实例化,满足单例模式要点的第二点。

 

      下面,我们来测试一下我们的单例模式,在这里我们不使用junit测试,代码如下:

package com.huawei.designpattern.singleton;

public class Test {

	public static void main(String[] args) {
		
		//分别获得两个单例模式的对象
		Singleton singleton1 = Singleton.newInstance();
		Singleton singleton2 = Singleton.newInstance();
		
		//分别打印两个对象的hash code
		System.out.println(singleton1.hashCode());
		System.out.println(singleton2.hashCode());
		
		//判断这两个对象的内存地址是否相等
		System.out.println(singleton1 == singleton2);
	}
}

       在测试代码中,我们创建了两个对象,分别打印了这两个对象的hashCode,然后再比较这两个对象的内存地址是否相等。我们知道,同类型的两个对象,若他们的hashcode相等、或他们的内存地址相等,则这两个对象是同一个对象,运行我们的代码看看结果吧:

12677476
12677476
true

  

分享到:
评论

相关推荐

    设计模式C++学习之单例模式(Singleton)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...

    23钟设计模式之单例模式

    单例模式是一种常用的设计模式,它的核心思想是在整个应用程序中,一个类只能有一个实例存在。单例模式常用于控制资源的共享,例如数据库连接池、日志服务等。单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及...

    c++-设计模式之单例模式(Singleton Pattern)

    单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要全局共享资源的场景,比如配置管理、日志记录等。 单例模式的组成 私有构造函数:防止外部...

    设计模式总结-模板设计模式,单例模式(singleTon)

    ### 设计模式总结:模板设计模式与单例模式 #### 模板设计模式 模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,...

    深入浅出单例Singleton模式

    【深入浅出单例Singleton模式】 单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局...

    设计之模式之单例(Singleton)

    在软件设计模式中,单例(Singleton)是一种广泛使用的模式,它确保一个类只有一个实例,并提供全局访问点。这个模式通常用于控制共享资源的访问,比如数据库连接、线程池或者配置对象。以下是对单例模式的详细阐述...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    Java设计模式之单例模式的七种写法

    Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...

    设计模式之单例模式Java实现和类设计图

    本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...

    大话设计模式--Singleton(单例模式)

    单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...

    设计模式之单例模式源码demo

    单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...

    设计模式之单例模式

    单例模式是软件设计模式中的一种基础模式,它在Java编程中被广泛应用。单例模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式可以有效地控制资源的使用,限制实例的数量,提高性能,尤其是在...

    设计模式之单例模式程序

    设计模式里面的单例模式程序 package com.rrppff; public class Singleton { private static String name; public static String getName() { return name; } public static void setName(String name) { ...

    研磨设计模式之单例模式

    通过研磨设计模式之单例模式的资料,你可以深入理解单例模式的原理、实现方式及其优缺点,进一步提升自己的编程技能和设计思维。学习并熟练掌握设计模式,对于成为一名优秀的Java开发者至关重要。

    设计模式-单例模式

    **设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...

    java设计模式之单例模式.zip

    Java设计模式是面向对象编程中的重要概念,它们是软件开发中经过验证的、解决常见问题的最佳实践。在这些模式中,单例模式是最为广泛使用的一种。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得在整个...

    java设计模式之单例模式详解

    单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制类的实例化过程,保证在任何情况下都只会创建一...

    创建型模式之单例模式(Singleton Pattern)

    单例模式是软件设计模式中的一种,属于创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者缓存服务等。 单例模式的核心...

Global site tag (gtag.js) - Google Analytics