工廠模式:
1.簡單工廠模式
- 主要角色:抽象類、實現類、工廠類
具體實現 專門定義一個類來負責創建其它類的實例,被創建的實例通常都具有共同的父類。
abstract class Transportation { protected $name; public function moveWay(){ } } class Car extends Transportation{ protected $name="汽車"; public function moveWay(){ return $this->name."_滾動"; } } class Aircraft extends Transportation{ protected $name="飛機"; public function moveWay(){ return $this->name."_飛行"; } } class Factorry{ public static function createTran($id){ switch ($id) { case 1: return new Car(); break; case 2: return new Aircraft(); break; default: return "input error"; } } } echo Factorry::createTran(2)->moveWay();
單例模式
在一個項目中保持一個對象只存在一個實例,全局調用便利。例如:數據庫操作對象、日誌寫入對象、全局配置解析對象等
<?php /** * Created by 馬廷廣 * User: 馬廷廣 * Date: 2015/7/30 * Time: 15:50 */ class singleton { private static $instance;//私有的靜態變量來存儲產生的對象實例 /* *構造方法,注意必須也是私有的,不允許被外部實例化(即在外部被new) */ private function __construct(){// echo __CLASS__."生成"; } /* *重載__clone方法,不允許對象實例被克隆 */ public function __clone(){ throw new Exception("Singleton Class Can Not Be Cloned"); } /* *類唯一實例的全局訪問點,用於判斷並返回對象實例,供外部調用 */ public static function getInstance(){ if(!self::$instance){ self::$instance=new self(); } return self::$instance; } /* *具體的業務方法,實際可以有很多方法,示例簡略 */ public function hello(){ echo "Hello World"; } } $sin=singleton::getInstance(); $sin->hello();//輸出:singleton生成 Hello World
註冊樹模式
註冊模式就是將一些對象註冊到全局樹上面,那麼可以被任何地方直接訪問
<?php /** * Created by 馬廷廣 * User: 馬廷廣 * Date: 2015/7/30 * Time: 16:16 */ class Register{ protected static $objects; //將一個對象註冊到全局的註冊樹上 static function _set($alias, $object){ //$alias:映射的名字 //當調用set方法時,將對象映射到註冊樹上 self::$objects[$alias] = $object; } //得到全局樹上的對象 static function get($name){ return self::$objects[$name]; } function _unset($alias){ //調用unset方法時,表示把對象從樹上移除 unset(self::$objects[$alias]); } }
class Aircraft {
protected $name="飛機";
public function moveWay(){
return $this->name."_飛行";
}
$aircraft=new Aircraft();//註冊樹模式的調用方法
Register::_set("aircraft",$aircraft);
echo Register::get("aircraft");