自己對設計模式的理解:工廠模式和單例模式
阿新 • • 發佈:2019-02-10
一、工廠模式:個人總結
class Factory
{
static function createObject($par)
{
if ($par == 1) {
$test1 = new Object1();
} elseif ($par == 2) {
$test2 = new Object2();
} else {
$test3 = new Object3();
}
}
}
// 在另外一個類中呼叫
class Test
{
//工廠模式,根據不同的引數,new出不同的物件
Factory::createObject(1);
Factory::createObject(2);
Factory::createObject(3);
}
class Factory
{
static function createObject($par)
{
if ($par == 1) {
$test1 = new Object1();
} elseif ($par == 2) {
$test2 = new Object2();
} else {
$test3 = new Object3();
}
}
}
// 在另外一個類中呼叫
class Test
{
//工廠模式,根據不同的引數,new出不同的物件
Factory::createObject(1);
Factory::createObject(2);
Factory::createObject(3);
}
二、單利模式
實現單例的條件:三私一公
三私:私有化構造方法:不讓外部建立物件
私有化克隆方法:不讓外部克隆物件
私有靜態屬性:儲存已經產生的物件
一公:公共靜態方法:在類內部建立物件
例項:
<?php //單例模式:一個類只能創造一個物件 class Single{ //屬性 private $name; public static $counts = 0; //定義一個靜態屬性來儲存物件 private static $single;//私有化構造方法 private function __construct($name){ $this->name = $name; //計數 self::$counts++; } //私有化克隆方法 private function __clone(){ //計數 self::$counts++; } //靜態方法,讓類進入到類的內部進行例項化得到物件 public staticfunction getInstance($name){ //判斷物件是否已經存在,如果存在則直接返回原來物件,否則創造新物件 if(self::$single){ //物件已經存在,返回原來物件 }else{ //物件不存在 self::$single = new Single($name); } //返回物件 return self::$single; } } //例項化 //$single = new Single('林志炫'); //訪問類物件數量 //echo Single::$counts; //得到物件 $single = Single::getInstance('馬雲'); var_dump($single); //訪問類物件數量 echo Single::$counts; //得到物件 $single = Single::getInstance('馬化騰'); var_dump($single); //訪問類物件數量 echo Single::$counts;
優點:只能建立一個物件,可節省記憶體資源