`
lovnet
  • 浏览: 6881401 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

单例模式(1)__基本定义以及实现

 
阅读更多

单例模式定义

单例模式(singleton)顾名思义,就是一个类只有一个实例。

作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的实现原理

1.一个类能够被创建多个实例,问题的根源在于类的构造方法是公开的,在类的外部可以通过构造方法创建多个实例。

2.要想控制一个类只被创建一个实例,那么首要的问题就是要把创建实例的权限收回来,让类自身来负责自己类实例的创建工作,然后由这个类来提供外部可以访问这个类实例的方法,这就是单例模式的实现方式。

具体实现方式

在Java中,单例模式的实现又分为两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。

懒汉式:

所谓懒汉式,既然是懒,那么在创建对象实例的时候就不着急,会一直等到马上要使用对象实例的时候才会创建,懒人嘛,总是推托不开的时候才去真正执行工作,因此在装载对象的时候不创建对象实例,到第一次使用的时候,才去创建实例。

写法如下:

privatestaticSingletonuniqueInstance=null;

示例代码如下:

public class Singleton {  
    /**  
     * 定义一个变量来存储创建好的类实例  
     */  
    private static Singleton uniqueInstance = null;  
    /**  
     * 私有化构造方法,可以在内部控制创建实例的数目  
     */  
    private Singleton(){  
        //  
    }  
    /**  
     * 定义一个方法来为客户端提供类实例  
     * @return 一个Singleton的实例  
     */  
    public static synchronized Singleton getInstance(){  
        //判断存储实例的变量是否有值  
        if(uniqueInstance == null){  
            //如果没有,就创建一个类实例,并把值赋值给存储类实例的变量  
            uniqueInstance = new Singleton();  
        }  
        //如果有值,那就直接使用  
        return uniqueInstance;  
    }  
 } 


饿汉式:

所谓饿汉式,既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是就在装载类的时候就创建对象实例,

写法如下:

privatestaticSingletonuniqueInstance=newSingleton();

示例代码如下:

public class Singleton {  
    /**  
     * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次  
     */  
    private static Singleton uniqueInstance = new Singleton();  
    /**  
     * 私有化构造方法,可以在内部控制创建实例的数目  
     */  
    private Singleton(){  
        //  
    }  
    /**  
     * 定义一个方法来为客户端提供类实例  
     * @return 一个Singleton的实例  
     */  
    public static Singleton getInstance(){  
        //直接使用已经创建好的实例  
        return uniqueInstance;  
    }  
 } 


参考文章:

1.http://book.51cto.com/art/201010/232011.htm

2.http://baike.baidu.com/view/1859857.htm


分享到:
评论

相关推荐

    PHP设计模式之单例模式__1.docx

    单例模式的基本思想是通过限制类的实例化过程,只允许类的内部创建一个实例,并通过静态方法提供对这个唯一实例的访问。在PHP中,实现单例模式通常包括以下几个关键步骤: 1. **私有化构造函数**:将类的构造函数设...

    Qt qml Singleton 单例模式

    首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如数据库连接、配置管理等,因为这些对象通常需要在整个应用程序...

    单例模式PHP实现代码类.zip

    1. **单例模式的基本概念**: - 单例模式的主要目的是限制类的实例化次数,确保任何时候都只有一个实例存在。 - 这个唯一实例可以通过一个全局访问点获取,通常是类的静态方法。 - 单例模式的关键在于防止其他...

    使用python写的单例模式日志记录器(设计模式之单例模式)

    首先,我们要理解单例模式的基本概念。单例模式的主要目的是控制类的实例化过程,保证在整个程序运行期间,该类只存在一个实例。这通常适用于那些需要频繁创建和销毁实例,且实例之间需要共享状态的场景。在Python中...

    OC单例模式讲解

    #### 三、OC中实现单例模式的基本步骤 1. **声明单例类**:首先定义一个类,并且确保它有一个私有的构造函数,防止外部通过构造函数来创建新的实例。 2. **私有化构造函数**:为了保证单例模式的唯一性,需要将构造...

    qt5编写的单例模式

    首先,理解单例模式的基本概念。在面向对象编程中,单例模式限制类的实例化过程,使得整个系统只能有一个实例。这样做的好处包括减少内存开销、避免资源竞争以及提供统一的访问接口等。在Qt5中,我们可以利用其强大...

    asp.net中c++单例实现问题分析__1.docx

    文档中提到了在多线程环境下实现单例模式时面临的问题——由于静态变量的初始化不是线程安全的,因此可能导致多个线程同时创建单例对象的实例,从而破坏单例模式的基本原则。 ##### 非线程安全的单例实现 ```cpp ...

    游戏角色创建程序(单例模式)

    1. 角色类(Character):定义角色的基本属性和行为。 2. 单例类(CharacterSingleton):持有角色类的单例实例,提供静态方法供外部获取角色创建服务。 3. 初始化逻辑:在单例类中处理角色的初始化,如读取默认设置...

    ActionScript 3.0里使用单例模式

    在AS3中实现单例模式的核心思想是定义一个包含静态方法`getInstance()`的类,该方法负责创建并返回类的唯一实例。例如: ```as public class MyClass { private static var _instance:MyClass; public function ...

    单例模式下的登录界面

    根据提供的信息,我们可以深入探讨单例模式下的登录界面设计与实现。这主要涉及两个核心方面:一是使用单例模式管理数据库连接(通过`DBUtil`类实现),二是设计登录界面并处理登录逻辑(通过`LoginForm`类实现)。 ...

    JAVA单例模式的登录案例

    根据给定的信息,我们可以深入探讨Java...综上所述,通过本案例的学习,我们不仅了解了如何在Java中实现单例模式,还掌握了基于Swing框架开发简单图形界面的基本方法,这对于后续学习Java GUI编程具有很好的参考价值。

    单例模式分享-吴昌良

    在给定的部分内容中,作者吴昌良通过一个具体的PHP示例展示了单例模式的基本实现方式: ```php namespace home; class test { private static $_instance; // 存储类实例的私有静态成员变量 // 定义一个私有的...

    设计模式入门之一:深入单例模式

    定义明确指出,单例模式保证一个类只有一个实例,通常通过私有构造函数防止直接实例化,而是通过一个公共的静态方法来获取这个唯一的实例。这种方法叫做“懒汉式”实现,即延迟初始化,只有在首次调用获取实例的方法...

    C#设计模式(1)——单例模式.pdf

    单例模式通过确保类的单一实例性以及提供一个全局访问点,有效地降低了系统的复杂性和对象间的耦合度。在实际应用中,根据具体需求选择合适的实现方式非常重要。无论是基于线程安全考虑还是性能优化,单例模式都是一...

    Java单例模式实现静态内部类方法示例

    静态内部类实现单例模式是指在类的内部定义一个静态内部类,该内部类中包含一个静态的实例变量,并在该类的静态块中实例化该变量。外部类通过获取内部类的实例来实现单例模式。 例如,在下面的代码中,我们定义了一...

    list循环退出Activity,单例模式实现android的退出功能,代替广播,singleton

    通常情况下,开发者可能会使用广播机制来实现这一功能,但使用单例模式来代替广播也可以达到同样的效果,并且能够避免广播可能带来的性能开销。 在给定的文件信息中,介绍了使用单例模式来管理Activity的退出。首先...

    深入理解JavaScript系列(25):设计模式之单例模式详解

    下面,我们就来深入探讨单例模式在JavaScript中的实现以及相关知识点。 首先,单例模式的基本概念是通过一个构造函数来封装创建一个实例的过程,保证这个构造函数只会被调用一次,返回的实例也是唯一的。在...

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    以上是关于工厂模式、单例模式和观察者模式的基本介绍和Java实现。这些设计模式在实际编程中有着广泛的应用,能帮助我们编写出更灵活、可维护的代码。在学习和使用这些模式时,应根据具体场景选择最适合的实现方式,...

Global site tag (gtag.js) - Google Analytics