美文网首页
PHP程序员学习设计模式之单件模式(Singleton Patt

PHP程序员学习设计模式之单件模式(Singleton Patt

作者: Do_you | 来源:发表于2018-03-01 22:06 被阅读0次

单件模式(Singleton Pattern)

单件模式可能是最著名的设计模式之一。你也许会遇到许多这样的情形,你会需要一个对象来处理你的应用中的一些集中的操作,例如一个日志记录对象。这种情况下,人们通常希望只有一个这样的覆盖整个应用范围的对象实力存在,并让整个应用的代码都可以访问它。具体地说,在一个日志记录对象中,你讲需要应用中的每一个地方的代码都可以访问他来把信息记录到日志中,而且让集中的日志机制根据日志级别设置处理日志信息的过滤。为了解决这种类型的问题,你需要使用单件模式。

让你的类变成一个单件类通常是通过实现一个静态的类方法getInstance()实现的,这个方法只会返回该类的唯一的实例。在你第一次调用这个方法的时候,它创建一个实例,把它存在一个私有的静态的变量中,并且给你返回实例。下一次,它将仅仅给你返回那个已经创建的实例的句柄。

下面是一个例子:

<?php
class Logger{
static private $instance = NULL;
static function getInstance()
{
        if (self::$instance==NULL)
{
        self::$instance=new Logger();
}
        return self::$instance;
}
        private function __construct()
{
}
        private function __clone()
{
        // TODO: Implement __clone() method.
}

function log($str){
        //注意日志
}
}
Logger::getInstance()->log("CheckPoint");

这个模式的本质是Logger::getInstance(),他让你可以在应用的任何地方访问日志对象,无论是从一个函数,一个方法,还是全局作用域中。

在这个例子中,构造函数和克隆方法都被定义为private。这么做的原因是为了防止开发者用new 或者clone运算符错误的创建第二个Logger类的实例;因此,getInstance()是唯一一个访问单件类实例的方法。

相关文章

网友评论

      本文标题:PHP程序员学习设计模式之单件模式(Singleton Patt

      本文链接:https://www.haomeiwen.com/subject/iponxftx.html