Woooowen You can do anything you set your mind to, man

PHP 单例模式和工厂模式

单例模式

单例模式主要包含几点:

  • 1.这个类有且只有一个实例存在,这样可以方式被多个实例化,造成多个操作.或者操作同时进行,你可以将单例用在数据库类上,这样在同一时间只会有一个数据库实例存在,也就是只会有一个数据库连接的存在,这样避免的过多的数据库连接,和不必要的系统资源的浪费.

  • 2.单例必须要有一个构造函数,并且这个构造函数为私有的,就是只能被该类所访问,这样可以防止其在其他类中被实例化,只能被其自身所实例化.

  • 3.需要有clone()函数重载.这样自定义一个clone()函数可以通过调用该函数在直接复制该类的实例化.

  • 4.需要有一个保存类实例的静态成员变量.

  • 5.需要有一个访问该实例对象的静态方法.这样可以提供给其他的类来访问单例中的方法.

//单例模式
class myClass{
    static $__staticvar; //静态成员变量
    private $_str; //私有的变量
    private function __construct(){
        $this->_str = '单例模式';
    }
    private function __clone(){} //重载clone方法
    //由于单例不能被其他类所实例化,也就是不能使用$test = new myclass();
    public static function getObject(){
    //判断静态成员中是否有该对象如果没有就重新实例化.有就直接返回
    if(!(self::$__staticvar instanceof self))
    {
        self::$__staticvar = new self();
    }
        return self::$__staticvar;
    }
    //单例的一个方法
    public function getStr(){
        return $this->_str;
    }
}

$dl = myClass::getObject();
print_r($dl->getStr());

静态成员变量$__staticvar主要用来保存该单例的实例化对象.外部访问的时候直接调用该类静态方法将实例化返回,可以避免的其他的类申明该类的实例.

通过单例,你可以调用单例类中定义的任何非私有的静态方法.

工厂模式

工厂模式,就是你定义一个接口,在接口中写下哪些方法可能会被用到.然后将每个特定的类起调用这个接口,并且重写里面的方法,在通过一个工厂类来根据判断而申明不同的类.工厂类必须返回一个对象,一般的命名规则为factory的静态方法.

//工厂模式
public static function factory($var){
    switch($var){
        case 'xx':
        $test = new classname();
        break;
        case 'xxx':
        $test = new classname1();
        break;
    }
return $test;
}

Woooowen 浙ICP备15013647号