1. 程式人生 > >自己對設計模式的理解:工廠模式和單例模式

自己對設計模式的理解:工廠模式和單例模式

一、工廠模式:個人總結
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 static
function 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;

優點:只能建立一個物件,可節省記憶體資源