`

单例 Singleton

阅读更多


actionscript :


In general, we will meet two problems here, one is when to

initialize the instance and the other is how to ensure thread-safe in

the multithread environment. Because Action Script 3 doesn’t support

multithread, so we don’t need to care the thread-safe.

    Before we solve the first problem, we need to provide a global

access point for getting the instance. Of course, we don’t except the

users use the new operator to get a new instance. Maybe we could

change the constructor modifier from public to private. Eh, if you

really do so, you’ll get a complier error, because in Action Script 3, the

modifier of a constructor can only be public. So, we need to change our method.

If we can’t change the modifier, the constructor can be called

outside. One solution is we can throw an error in the constructor, just like below.



public function President()
{
    if(president != null)
    throw new Error("You shouldn't use the new operator!");
}





If there is already have an instance, we need to throw an error. If

not, let it go, and then we can get an instance.This is not a good way, but it works :).

    Now, let’s come to the firstproblem. In general, there will be two kinds solution.

One is called  early initialization , the other is lazy initialization . The first one

initializes the instance when the program first runs, and the other

initializes the instance when the getInstance () method called.

The code below shows early initialization. The instance will get

initialized when the class gets initialized.



static var president:President = new President();
public static function getInstance():President
{
    return president;
}




The code below shows lazy initialization. As you see, after the

getInstance() method was called, the instance will get initialized.



static var president:President = null;
public static function getInstance():President
{
    if(president == null)
    president = new President();
    return president;
}

 


Which way should be taken depends on your demand. Actually,

you’ll need to consider these two situations only when you using this

pattern to get a big object in the memory limit environment.


 

public class BallModelLocator
{
    private static var modelLocator :BallModelLocator;
    public function BallModelLocator()
    {
        if(modelLocator != null)
        throw new Error("You shouldn't use the new operator!");
    }
    // (lazy initialization)
    public static function getInstance() : BallModelLocator{
        if ( modelLocator == null )
            modelLocator = new BallModelLocator();
        return modelLocator;
    }
}



java :


public class UserService {
    private UserService userService = null;

    private UserService() {}

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

 




分享到:
评论
1 楼 xiejiangbo 2009-09-01  
Failure is the mother of success. -- Thomas Paine

相关推荐

    深入浅出单例Singleton模式

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

    Singleton(单例模式)

    在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这可以节省一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率...

    单例 singleton txt

    单例模式(Singleton Pattern)是一种常用的软件设计模式,属于创建型模式之一。其主要目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在某些情况下非常有用,比如系统中需要频繁创建后又销毁...

    Java 单例模式Singleton

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

    Qt qml Singleton 单例模式

    在Qml文件中,你可以使用Singleton组件来实例化并访问这个单例对象: ```qml import QtQuick 2.0 import com.example.singleton 1.0 Singleton { id: mySingleton } Text { text: mySingleton.data } ...

    单例模式 Singleton Pattern

    ### 单例模式 Singleton Pattern #### 概述 单例模式是一种常见的设计模式,属于创建型模式之一。这种模式的核心在于确保某个类只有一个实例存在,并且提供一个全局访问点来获取该实例。单例模式在Java开发中尤其...

    单例模式Singleton(java源码)

    单例模式的特点有三: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,...

    .Net 单例模式(Singleton)

    单例模式是一种常见的设计模式,用于确保一个类只有一个实例,同时向整个系统提供这个唯一的实例。这种模式在许多场景中都十分有用,例如,在一个系统中打印机假脱机程序(PrinterSpooler)应该是唯一的,以避免打印...

    ios播放单例类 singleton

    在iOS开发中,单例(Singleton)是一种常用的模式,它保证了类只有一个实例,并提供一个全局访问点。在本案例中,"ios播放单例类 singleton"是一个专门用于管理音频播放的单例类,名为`SoundManager`。这个类的设计...

    单例极致 singleton C++

    四种常见的单例: 1、没有构造函数(DEFINE_SINGLETON_DEFAULT); 2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_...

    qt5编写的单例模式

    单例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统中只有一个实例存在,并提供一个全局访问点。在Qt5框架中,我们可以通过特定的方式来实现这一模式,以便在多个模块之间共享数据或者控制资源。...

    单例模式(singleton)

    单例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。在Java或类似编程语言中,单例模式常常被用来管理资源,比如数据库连接、线程池或者配置信息,因为这些...

    单例实现源码singleton-C++

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

    单例模式Singleton

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

    各种设计模式及解析

    1、命令模式 Command (人,开关,电灯) 2、策略模式 Strategy (用户选择各种排序方法进行排序) ...6、单例 Singleton (保证应用程序中,某个类只有一个实例存在) 7、代理模式、观察者模式、工厂模式、装饰模式等

    单例模式(Singleton)的6种实现

    类加载机制保证了`SingletonInstance`只会在首次调用`getInstance`时被加载,因此创建单例。 6. **枚举** 这是Joshua Bloch在《Effective Java》中推荐的实现方式,既简单又线程安全,同时也防止反射攻击。 ```...

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

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

    Java面向对象(高级)- 单例(Singleton)设计模式

    单例设计模式是面向对象编程中的一种常见设计模式,它的主要目的是确保一个类在整个程序运行期间只有一个实例,并提供全局访问点。这种模式在Java中被广泛应用,尤其是在需要控制资源的共享,如数据库连接池,线程池...

    设计之模式之单例(Singleton)

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

Global site tag (gtag.js) - Google Analytics