`
bryande
  • 浏览: 8845 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • zxf_noimp: 有的拿就行了,知足吧
    无 语
  • lkj107: 建议跳过外包,直接去,何必要让人中间拦一下
    无 语
  • treblesoftware: 说个难听的话,上海有些人,宠物养护费一个月还花5500。
    无 语
  • bryande: sdao 写道你这头像一点都不低调哦 说的是你楼上吧。    ...
    无 语
  • bryande: 21xz 写道工作一年半 懂的还真不少啊,我到时候能有你一半就 ...
    无 语

设计模式之单例

阅读更多

所谓单例必须满足

1.一个类只能有一个实例

2.实例只能由自己去创建

3.必须自行提供实例

单例可以分为饿汉式、懒汉式、注册式单例

下面是饿汉式单例模式的代码:

public class Singleton {
	//定义唯一实例并初始化
	private  static final  Singleton  instance=new Singleton();
	//私有构造器防止外部通过new实例化
	private  Singleton(){
	}
	//向全局提供唯一实例
	public  static Singleton  getInstance(){
		return  instance;
	}

}

 

备注:该类在加载时会调用私有构造器初始化唯一实例,另外构造器是私有的因而不能被继承。

下面是懒汉式单例模式的代码:

public class Singleton {
	//定义唯一实例
	private  static  Singleton instance=null;
	//私有构造器
	private Singleton(){
	}
	/**
	 * 加载类(静态加载器)的时候并没有初始化实例
	 * 而是在调用的时候才初始化实例
	 * 因而称为懒汉式单例
	 * 用synchronized关键字防止
	 * 同时多个线程调用创建多个实例
	 */
	public  synchronized  Singleton getInstance(){
		if(null==instance)
			instance=new Singleton();
		return instance;
	}

}

 备注:该类在加载时会调用私有构造器初始化唯一实例,另外构造器是私有的因而不能被继承。

注册式单例类是为了克服饿汉、懒汉式单例不能被继承的缺点而设计的。

public class Singleton {
	//定义唯一实例
	private  static  HashMap m_instance=new HashMap();
	static {
		Singleton  s=new Singleton();
		m_instance.put(s.getClass().getName(), s);
	}
	//保护的构造器
	protected Singleton(){
	}
	public  static  Singleton  getInstance(String name){
		 if(name==null){
			 name="Singleton";
		 }
		 //如果hashmap中没有该单例类,则将其添加进去
		 if(!m_instance.containsKey(name)){
			try{
				 //利用Java反射机制动态实例化该单例类
				m_instance.put(name, Class.forName(name).newInstance());
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		 }
		 
		 return  (Singleton)m_instance.get(name);
	 
 }
}

 下面子类化该注册式单例类

public class SingletonChild extends Singleton {
	public  SingletonChild(){}
	/**
	 * 静态工厂方法
	 */
	public  static  SingletonChild  getInstance(){
		return  (SingletonChild)Singleton.getInstance("SingletonChild");
	}
}

 

因为子类要继承父类,因此父类构造器必须是公开的。这样就有可能直接通过new来产生单例类而不通过父类的注册,这是注册式单例类的一个缺点.

 

 

 

分享到:
评论

相关推荐

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

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

    python 设计模式之单例模式

    python 设计模式之单例模式

    设计模式之单例模式详解.pdf

    设计模式之单例模式详解 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 单例模式的实现主要是...

    设计模式之单例模式

    ### 设计模式之单例模式 #### 概述 单例模式(Singleton Pattern)是软件设计模式中的一个重要组成部分,属于创建型模式之一。它保证一个类仅有一个实例,并提供一个全局访问点。单例模式的核心在于确保某个类只有...

    研磨设计模式之单例模式

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

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

    Java设计模式之单例模式详解 一、单例模式概览 单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制...

    设计模式之单例模式(结合工厂模式)

    单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...

    设计模式之单例模式和工厂模式

    细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解

    php设计模式之单例模式_.docx

    ### PHP设计模式之单例模式详解 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决特定类型的问题。PHP作为一种流行的服务器端脚本语言,同样可以从这些设计模式中受益。本文将详细介绍...

    JAVA设计模式之单例模式(完整版)1[定义].pdf

    JAVA设计模式之单例模式(完整版)1[定义].pdf

    23钟设计模式之单例模式

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

    设计模式之单例模式.md

    设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助

    设计模式之单例模式.pptx

    单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放...

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

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

    Java设计模式之单例模式讲解

    入名所示,该文件为最详细的Java单例模式讲解并附有讲解代码。主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免...

    Java设计模式之单例模式

    目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...

    JavaScript设计模式之单例模式.md

    为了帮助大家快速和较好地理解JavaScript设计模式中的单例模式,本文对JavaScript的单例模式进行了分析并进行简易的代码演示,希望本文能够给有需要的人带来一点小小的帮助。

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

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

Global site tag (gtag.js) - Google Analytics