php单例模式和工厂模式

一、单例模式

一个类只能实例化一个对象

class Ren
{
private static $dx; //用来存储生成的对象,静态方法调用静态成员
public $name;

//私有的构造函数
private function __construct()
{

}
//生成对象的方法
public static function DuiXiang()
{
if(empty(self::$dx))//判断是否为空,如果空,则new一个新的对象
{
self::$dx = new Ren();
}

return self::$dx;
}
}

$r = Ren::DuiXiang();
$r->name = "张三";

$r1 = Ren::DuiXiang();

var_dump($r1);

 

二、工厂模式

第一种方式: 安全性不高

 

class suan

{

       public $a;

       public $b;

      

       function jia()

       {

              return $this->a+$this->b;

       }

       function jian()

       {

              return $this->a-$this->b;

       }

}

$s=new suan();

$s->a=10;

$s->b=5;

echo $s->jia();

 

  第二种方式:可拓展性强

class YunSuan

{

       public $a;

       public $b;

      

       function Suan()

       {

       }

}

class Jia extends YunSuan

{

       function Suan()

       {

              return $this->a+$this->b;

       }

}

 

class Jian extends YunSuan

{

       function Suan()

       {

              return $this->a-$this->b;

       }

}

$s = new Jia();

$s->a=10;

$s->b=5;

echo $s->Suan();

  第三种方式:工厂模式  

 

目的:解决第二种方式的缺点:当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的对象

class YunSuan

{

       public $a;

       public $b;

      

       function Suan()

       {

       }

}

 

class Jia extends YunSuan

{

       function Suan()

       {

              return $this->a+$this->b;

       }

}

 

class Jian extends YunSuan

{

       function Suan()

       {

              return $this->a-$this->b;

       }

}            //到此为止与第二种方式一样 ;目的是解决当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的类

class GongChang

{

       static function ShengChan($f)

       {

              switch($f)

              {

                     case "+":

                            return new Jia();

                            break;

                     case "-":

                            return new Jian();

                            break;

              }

       }

}

 

$r = GongChang::ShengChan("-");

$r->a=10;

$r->b=5;

echo $r->Suan();

  

posted @ 2017-04-23 08:47  梦深深处  阅读(1467)  评论(0编辑  收藏  举报