您的位置:首页 > 其它

关于单例模式的总结

2014-07-28 22:21 204 查看
在讨论单利模式之前首先先明白一个问题。为什么使用静态变量和方法。之前我面试的时候面试官问我这个问题我一下子懵了。

翻了一下书,书上是这样说的,

首先。他们在代码的任何地方都可以用(假设你可以访问该类)。也就是说你不需要在对象间传递来的实例,也不需要将实例

放到全局变量中,就可以访问类中的方法。(说白了。就是静态属性和方法在类中摆着呢。随时随地只要有权限就可以去访问。)

其次,类的每个实例都可以访问类中定义的静态属性,所以你可以利用静态属性来设置值,该值可以被类中的所有对象使用。

最后,不需要实例话就能访问来中的属性和方法。这样就不用为实现一个简单的功能而实例化对象。

下面根据各种资料总结一下单例模式

单例模式在Java中(PHP中的也一样)的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

这里面包括了三个要点。

1,一个类有且只有一个实例。开始对这点我也很模糊但是后来用百度了一下。有个很好的例子RT

计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能

有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只

应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若

干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

2.这个类必须自行创建这实例。

3.必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:

一是单例模式的类只提供私有的构造函数,

二是类定义中含有一个该类的静态私有对象,

三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象

class DL{
private static $instance;

//构造方法使用 private 防止new 操作 确保单例
private __construct(){
.........................
}
//public static保证其全局的可访问性。在不用实例化对象的情况下,对外提供了统一的借口。而且自行实例。而且保证了只有一个实例。

public static function getInstance(){
if(null == self::instance){
self::instance = new DL();
}
return self::instance;
}
private static __clone(){
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: