设计模式--Singleton
来源:广州中睿信息技术有限公司
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1883


  什么是单例模式?

  这是一个非常简单的设计模式,让我告诉你一件事,有很多的设计模式,他们是隐式的单身。我建议,首先通过其他模式先了解。

  在许多情况下,我们只需要通过应用程序对象的一个实例,可能会像用户的特定类的具体范围,不应该允许用户或其他类创建自己的对象。除了从一个实例,同一个对象,应提供或控制对象的创建和提供的任何要求对象的实例。

  标准的定义是:“确保一个类只有一个实例,并提供一个访问它的全局来看。”

 

  设计

  在定义,第一部分是“确保一个类只有一个实例”。我们怎能说只有一个实例?

  当且仅当同一类不创建自己控制它的访问,我们不能确保有只有一个实例。因此,如何避免发行对象的'新'关键字?为私有,使类的默认构造。就是这样,没有一个人就能发出你的类的'新'的关键字。

  

  现在他们将创建类的实例吗?声明一个类类型的私有变量和初始化类的范围。

     

  现在的问题是,除非被称为构造这个类范围的变量不会被初始化,所以现在做什么呢?应该叫什么,在类初始化或通过调用构造函数创建实例。因此,我们必须使用一个静态的方法或属性,这样,即使没有初始化的类可以使用反过来,它会创建一个对象和使用的回报。使私有类范围为静态变量,你知道为什么正确?如果它不是静态的,我们不能调用静态方法或属性内。

  

  现在发生的事情是,当我们调用静态方法,这是私有变量将初始化,当它是,就是这样的'新'的关键字,将调用私有构造。我们有创建的类的对象。

  作为实例方法是静态的不能被覆盖在派生调用静态方法不是虚拟的。

  现在这里有问题,如果两个线程试图创建一个实例?有许多方法来实现这一点。它是在这里。还记得,如果变量没有被完全初始化,它不应该被访问。下面是完整的例子。

  

  现在,你会说,它像一个静态类的区别是什么?基本区别是,一个多线程的环境中,每个线程维护一个实例Singleton是一个跨线程。

  执行相同的模式的另一种方式

  

  让我们来看看实际的例子:

 

  需求

  在我的应用程序之一,我们有像在两种不同的格式显示地址的要求。一种格式是那些有国家将使用一种格式和这些国家没有国家使用其他格式的国家一样。但客户端没有为所有国家的数据。如果美国是在数据基地,那么我们需要显示状态下拉或者不显示,它是动态的。这里使用状态都很高,各国频繁访问的基础上的国家代码(通用代码)。

 

  设计方法

    各国频繁访问,不知道时的状态数据将可用。  

    整个应用相同的信息,必须由所有的用户使用。   

       决定由国家代码参数使用Singleton 。这里的实例保持跨越根据国家代码,而不是同一个实例的应用程序相同。

 

  代码  

        

  与其他模式比较

  抽象工厂,Builder,和原型可以使用在其实施的独生子女。Facade的对象往往是单件,因为只有一个门面对象是必需的。   状态的对象往往是单件。

 

 

本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。