php单例模式和工厂模式

Posted 梦深深处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

  






















以上是关于php单例模式和工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式

PHP------单例模式和工厂模式

PHP设计模式之工厂/单例/注册者模式

php单例模式与工厂模式

PHP模式设计之单例模式工厂模式注册树模式适配器模式观察者模式

php设计模式 工厂单例注册树模式