`
fantaxy025025
  • 浏览: 1309505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

singleton完美写法

 
阅读更多

package com.june.study.design_pattens.singleton;

/**
 * 写一个完美的还真不容易,感谢良葛格老师!
 *
 * 1. 实例的private性质和static性质
 * 2. 构造器的private性
 * 3. 如果是lazy-init的话,需要注意线程安全性
 * 4. 看看线程安全性设计里,synchronized的位置;为什么判断两次instance==null呢!
 *
 * @author lijg fantaxy025025@126.com 
 * @date Feb 25, 2010 1:27:19 PM
 * @version V3.0
 */
public class LazyThreadSafeSongleton {
   
    private static LazyThreadSafeSongleton instance = null;
   
    private LazyThreadSafeSongleton(){
        //nothing here
    }
   
    /** 既然synchronized可以,lock也可以哦! */
    public static LazyThreadSafeSongleton getInstance(){
        if(instance == null){//one
            synchronized (LazyThreadSafeSongleton.class) {//here!
                if (instance == null) {//two
                    instance = new LazyThreadSafeSongleton();
                }
            }
        }
       
        return instance;
    }
   
}

 

package com.june.study.design_pattens.singleton;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class LazyThreadSafeSingleton2 {
    private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
   
    private static LazyThreadSafeSingleton2 instance = null;
   
    private LazyThreadSafeSingleton2(){
        //nothing here
    }
   
    /** 既然synchronized可以,lock也可以哦! */
    public static LazyThreadSafeSingleton2 getInstance(){
        if(instance == null){//one
            reentrantReadWriteLock.writeLock().lock();
            try {
                if (instance == null) {
                    instance = new LazyThreadSafeSingleton2();
                }
            } catch (Exception e) {
                //sth here
            } finally{
                reentrantReadWriteLock.writeLock().unlock();
            }
        }
       
        return instance;
    }
   
}

 

package com.june.study.design_pattens.singleton;

public class NormalSingleton {

    private static NormalSingleton instance = new NormalSingleton();//here!
   
    private NormalSingleton(){
        //nothing here
    }
   
    public static NormalSingleton getInstance(){
        return instance;
    }
   
    public static void main(String[] args) {
       
    }

}

 

 

分享到:
评论

相关推荐

    C++完美实现Singleton模式

    ### C++中实现Singleton模式的关键知识点 #### 一、Singleton模式简介 Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源...

    Singleton

    Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这个模式在许多场景下非常有用,例如当系统只需要一个共享的配置对象或者管理某种资源时。Singleton模式的核心特点是单例...

    C++ 实现的singleton 模式

    **C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...

    Qt qml Singleton 单例模式

    在Qml中,我们可以通过Qt的Singleton组件来实现这一模式。 首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如...

    完美Singleton实现

    ### 完美Singleton实现 #### 一、Singleton模式概述与应用场景 Singleton模式是软件工程中最基本也是最常用的设计模式之一。其核心目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式通常用于那些需要...

    singleton设计模式java实现及对比

    **Singleton设计模式** Singleton设计模式是软件工程中最常用的设计模式之一,它的主要目的是确保一个类只有一个实例,并提供全局访问点。在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将...

    Singleton Pattern 源码

    单例模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制资源的唯一性、全局配置对象或者缓存服务等。本篇文章将深入探讨...

    Singleton 单例模式

    Singleton 单例模式是软件设计模式中的一种,它限制了类的实例化过程,确保一个类在整个系统中只有一个实例存在。这种模式常用于系统资源管理,比如数据库连接、线程池或者缓存服务等,因为这些资源往往需要全局共享...

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...

    单例极致 singleton C++

    1、没有构造函数(DEFINE_SINGLETON_DEFAULT); 2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT)...

    SingleTon的模板(template)化应用

    文件“110425-iceSingeTom”可能是某个关于冰冻单例(Frozen Singleton)或者基于C++标准库`std::call_once`实现的线程安全单例的示例,这种实现方式可以避免在多线程环境中多次实例化。冰冻单例是一种特殊的单例,...

    单例模式Singleton

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心思想是确保一个类在整个应用程序中只有一个实例存在,并提供一个全局访问点来获取这个实例。这种模式在很多场景下非常有用,比如管理系统资源、...

    (创建型模式)Singleton模式

    Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...

    单例模式Singleton(java源码)

    Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...

    SingletonTemplate

    "SingletonTemplate"显然是一种为了简化单例模式实现而设计的模板类。 在Java或其他面向对象语言中,实现单例模式有多种方法,但常见的有饿汉式、懒汉式、双重检查锁定(DCL)以及静态内部类等。SingletonTemplate...

    Laravel开发-singleton-pattern

    在Laravel框架中,设计模式的应用是提升代码质量和可维护性的重要手段之一,而Singleton(单例模式)是其中一种常见的模式。Singleton确保一个类只有一个实例,并提供一个全局访问点,这样可以避免创建多个对象导致...

    单例实现源码singleton-C++

    以下是对"单例实现源码singleton-C++"的详细解析。 1. **静态成员变量法** 这是最常见的单例实现方式。在类中定义一个静态成员变量,该变量保存唯一的实例。例如: ```cpp class Singleton { public: static ...

    Loki singleton

    【Loki Singleton】 Loki 是一个 C++ 的库,它提供了许多设计模式的实现,包括单例模式(Singleton)。在软件工程中,单例模式是一种常用的创建对象的方式,确保一个类只有一个实例,并提供一个全局访问点。这在...

Global site tag (gtag.js) - Google Analytics