php單例模式和原廠模式

來源:互聯網
上載者:User

標籤:方式   switch   private   成員   stat   ons   color   this   靜態成員   

一、單例模式

一個類只能執行個體化一個對象

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單例模式和原廠模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.