標籤:方式 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單例模式和原廠模式