`
nairuo1988
  • 浏览: 2910 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

单件模式(Singleton Pattern)

阅读更多
                             --Head First Design Pattern
定义:
    单件模式确保一个类只有一个实例,并提供一个全局访问点。

适用地方:
    eg:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表(registry)的对象、日志对象、充当打印机、显卡等设备的驱动程序的对象。

三要素:对自身的引用,私有构造器,static getInstance()方法

关键字:
    ①延迟实例化②同步问题③double-check locking④类加载器
 

1、
public class Singleton{
	private static Singleton uniqueInstance;

         //other field
	
	private Singleton(){}		  //私有构造器

	public static Singleton getInstance(){
		if(uniqueInstance == null){
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}
       
        //other useful methods
}


2、多线程情况下:
     把getInstance()变成同步(synchronized)方法:
public class Singleton{
	private static Singleton uniqueInstance;
	
         //other field

	private Singleton(){}		  //私有构造器

	public static synchronized Singleton getInstance(){
		if(uniqueInstance == null){
			uniqueInstance = new Singleton();
		}
		return uniqueInstance;
	}

         //other useful method
}

   性能问题:同步一个方法可能使性能下降100倍

   方案:
(1)“急切”创建实例,不使用延迟实例化
    适用:应用程序总是创建并使用单件实例,或在创建和运行方面负担不太繁重
public class Singleton{
	private static Singleton uniqueInstance = new Singleton();
	
	private Singleton(){}		  //私有构造器

	public static Singleton getInstance(){
		return uniqueInstance;
	}
}


(2)“双重检查加锁(double-checked locking)”,在getInstance()中减少使用同步
public class Singleton{
    private volatile static Singleton uniqueInstance;
	
    private Singleton(){}		  //私有构造器

     public static Singleton getInstance(){
        if(uniqueInstance == null){
            synchronized (Singleton.class){
	       if(uniqueInstance == null){
	           uniqueInstance = new Singleton();
	       }
            }
        }
        return uniqueInstance;
    }
}

注:
    1、volatile关键字:确保当uniqueInstance变量被初始化成Singleton实例时,多 个线程正确的处理uniqueInstance变量。
    2、在1.4及更早版本的Java中,许多JVM对volatile关键字的实现会导致双重加锁失败的失效。


类加载器问题:
    每个类加载器定义了一个命名空间,如果有两个以上的类加载器,不同的类加载器可能会加载同一个类,就可能会产生多个单件并存的现象。
    若程序有多个类加载器又使用了单件模式:自行指定类加载器,并指定同一个类加载器。



序列化问题:
     studying..


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    单件模式(Singleton pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于系统中需要频繁创建和销毁的对象,如日志服务、线程池或者数据库连接等...

    设计模式 之 单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的核心意图是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,这样的设计模式能够有效地控制资源的使用,限制实例的数量,以及协调对象间的交互...

    c++实现单件模式 c++实现单件模式 c++实现单件模式

    单件模式(Singleton Pattern)是设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在软件开发中被广泛应用,比如配置管理、数据库连接池、日志服务等场景,需要确保全系统...

    C++设计模式课件12_Singleton_单件模式.pdf

    ### 单件模式(Singleton Pattern)详解 #### 概述 单件模式是软件设计模式中最为基础且应用广泛的一种模式。它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。此模式通常用于那些需要频繁创建、消耗...

    C#单件模式例子 内含C#编写源代码

    单件模式(Singleton Pattern)是设计模式中的一种结构型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在C#编程中,单例模式被广泛应用于那些需要频繁创建和销毁的对象,比如线程池、数据库...

    单件模式试做--static的使用

    单件模式(Singleton Pattern)是设计模式中的一种结构型模式,它的主要目的是保证一个类只有一个实例,并提供一个全局访问点。这种模式常用于系统中需要频繁创建和销毁的对象,例如日志服务、线程池、数据库连接等...

    基于C#的设计模式中的单件模式

    单件模式(Singleton Pattern)是软件设计模式中的一种基础模式,它确保一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式的实现有多种方式,包括懒汉式、饿汉式以及线程安全的实现。下面我们将详细讨论...

    C#设计模式,单件模式,C#代码

    C#作为.NET框架的主要编程语言,广泛应用于各种复杂系统开发,其中单件模式(Singleton Pattern)是C#开发者经常会遇到的一种设计模式。本资源旨在帮助初学者理解并应用单件模式,通过关键代码实例,让你快速掌握这...

    C#设计模式_设计模式_C#_

    单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge ...

    单件模式源代码

    单件模式(Singleton Pattern)是软件设计模式中最基础且常用的一种模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制实例化过程或者资源管理的场景中尤其适用,例如日志服务...

    深入浅出设计模式之单件模式

    单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都非常有用,比如管理共享资源(如内存、文件句柄等)、作为...

    单件模式demo

    单件模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中特别有用,因为它可以避免因对象创建和销毁带来的开销,同时...

    设计模式代码——c#

    1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7...

    23种设计模式 (创建型,结构型,行为型)

    单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接...

    设计模式\单件模式VS2005

    单件模式(Singleton Pattern)是软件设计模式中的一种经典模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接等需要全局唯一的...

    用单件模式写的写日志文件(VC版)

    单件模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++编程中,单件模式通常用于管理共享资源,比如日志系统,因为它需要在整个应用程序中被多个组件访问,...

    单件模式Sigleton范例

    单件模式(Singleton Pattern)是软件设计模式中的一种,它保证了类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象,且这些对象之间需要共享状态时非常有用。例如,在系统中只有一个数据库...

    32种设计模式

    单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter ...

    单件模式的C++标准实现.docx

    单件模式(Singleton Pattern)是一种常用的软件设计模式,它的主要意图是确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单件模式通常涉及到类的静态成员和私有构造函数的使用,以防止用户直接创建类...

    单件模式的演变到n件模式

    单件模式(Singleton Pattern)是设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者日志系统等。然而,随着...

Global site tag (gtag.js) - Google Analytics