哪位大哥用通俗的语言给我介绍一下什么是单例模式?最好可以有代码跟随(网上的语言太专业,表示理解不懂)
1、new ChuiZi() 就是生成一次实例,生成一次实例就是造一个锤子。
2、如果你每次用到锤子,你就造一个锤子,那多费铁啊,用地方储存啊。计算机里就是要用内存啊,要用资源啊。
3、于是就有人想,怎么只用一个锤子,而不是每次都New一个锤子。
于是就有了单例模式 :
class ChuiZi {
static private $_instance = NULL;
public static function getInstance() {
if(self::$_instance == NULL) {
self::$_instance = new ChuiZi();
}
return self::$_instance;
}
}
// 这样 ChuiZi::getInstance(); 大家就都是用同一个实例啦
4、虽然我们可以要求同伴都ChuiZi::getInstance()
这么写这么调用。但是难免有人会new 一个,或者克隆一个。那不就不是单个实例了!!!于是:
class ChuiZi {
static private $_instance = NULL;
public static function getInstance() {
if(self::$_instance == NULL) {
self::$_instance = new ChuiZi();
}
return self::$_instance;
}
private function __construct() {}
private function __clone() {}
}
所以发现这设计模式,不是为了装逼而是为了解决问题。
以上就是单例模式。
不要问我一个锤子够用吗!!!
要是问我是不是所有情况都适合用单例,我倒是想好了一个案例:new GirlFriend();
实现资源、对象、参数的共享,通常就是两种实现方式,一种是静态化,第二就是单例模型。
相比于静态化,单例模型更加优雅一下,它可以更加方便的随时释放对象,更换对象,也能很好的与其他非静态对象桥接。在很多其他场合,单例模型都有不错的体现,比如iOS、Android中最基础的Application类就是单例化的
说个用得比较多得实际案例吧
一般情况下,DB类都是应用了单例模式的.
实例化一次后,多次调用都不会被实例化,避免性能浪费.
单例!
目的就是为了防止产生多个实例化对象
第一次产生后放到类的一个静态变量中,下次再实例化就直接返回这个静态变量
单例模式就是某个类只能产生一个实例。这个类的构造函数用private修饰,这样其他类就不能构造这个类的实例,只能由这个类自己实例化一个提供给别的类。
应用场景,比如某个类是控制某个生产线的运作流程,那么这个类最好用单例模式。因为控制类只能有一个,多了的话,那么多个类一起控制运作,岂不乱了套。
提供一种更好的写法
private static $_instance;
public static function getInstance()
{
if (! self::$_instance instanceof self) {
self::$_instance = new self();
}
return self::$_instance;
}