工廠模式
例如:Auth::user()
此處Auth這個類就是工廠中的方法,Auth是註冊樹中的別名。
好處:
類似於函數的封裝,使對象有一個統一的生成(實例化)入口。當我們對象所對應的類的類名發生變化的時候,我們只需要改一下工廠類類裏面的實例化方法即可。
單例模式
好處:
對象不可外部實例化並且只能實例化一次,節省資源。
實現方式
private static $ins = null; //設置私有的屬性
private function __construct() {} //使外部無法new這個類
public static function getIns() { //暴露給外部的調用方法
if(self::$ins instanceof self) {
return self::$ins;
} else {
self::$ins = new self();
return self::$ins;
}
}
聲明一個類的私有或者保護的靜態變量,構造方法聲明爲私有(不允許外部進行new操作),如果不存在則實例化它,然後返回,如果存在則直接返回。
3:註冊樹模式
使用:
config/app裏的aliases數組便是一個註冊樹
好處:
註冊樹模式就是使用數組結構來存取對象,工廠方法只需要調用一次(可以放到系統環境初始化這樣的地方),以後需要調用該對象的時候直接從註冊樹上面取出來即可,不需要再調用工廠方法和單例模式。
class Register {
protected static $objects
function set($alias,$object) { //將對象映射到全局樹上
self::$objects[$alias]=$object;
}
static function get($name) { //獲取對象
return self::$objects[$name];
}
function _unset($alias) { //從全局樹移除對象
unset(self::$onjects[$alias]);
}
}
觀察者模式