基础设计模式:单例模式+工厂模式+注册树模式
生活随笔
收集整理的這篇文章主要介紹了
基础设计模式:单例模式+工厂模式+注册树模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單例模式:
通過提供自身共享實例的訪問,單例設計模式用于限制特定對象只能被創建一次。
使用場景:
一般數據庫實例都會用單例模式
實現:
單例設計模式就是要一個類只能實例化一個對象。
要想讓一個類只能實例化一個對象,就要讓類先不能實例化對象,就是構造方法私有。
現在,要想實例化該類必須通過訪問靜態方法來實例化改類
為了防止實例多次,需要通過一個成員變量來控制加以判斷
因為靜態方法不能訪問非靜態成員,所以聲明的成員也要是靜態的,同時防止外部訪問該成員,還要私有
class Singleton{private static $_instance; //聲明一個私有的,靜態的成員屬性$instance;private function __construct(){} //構造方法私有,防止new實例化。public static function getInstance(){ //只能通過靜態方法實例化對象if( !( self::$_instance instanceof Singleton ) )self::$_instance = new self();return self::$obj;}
private function __clone(){} //防止clone對象。
private function __wakeup(){} //防止使用序列化。
function query($sql){echo $sql;} }/*通過靜態方法實例化*/ $db = Singleton::getInstance();//訪問對象中的成員 $db->query("select * from user");
?工廠模式:
工廠類就是一個專門用來創建其它對象的類。所有地方加載類都走工廠方法。
注冊樹模式:
小工程并不實用,對于大工程方便管理生成對象。
三個模式的結合使用:
一個數據庫的單例模式,通過工廠方法調用,生成的對象注冊到注冊樹中。
<?php/*** 單例模式*/ trait Singleton {private static $_instance;private function __construct(){}public static function getInstance(){if (!(self::$_instance instanceof Singleton)) {self::$_instance = new Static();}return self::$_instance;}final private function __clone(){} }/*** 數據庫類,通過trait使用單例模式*/ class Database{use Singleton;public function query($sql){//return ret... } }/*** 工廠方法,生成對象*/ class Loader {/*** 創建對象方法,創建成功加入注冊樹* @param $cls* @return null|static*/public static function loadObject($cls){$obj = ObjectFinder::find($cls);if (!is_object($obj)) {$obj = $cls::getInstance();ObjectFinder::register($cls, $obj);}return $obj;} }/*** 注冊樹類,存取工廠創建好的對象*/ class ObjectFinder {protected static $_object;/*** 獲取類對應的對象* @param $cls* @return null*/public static function find($cls){if (isset(self::$_object[$cls])) {return self::$_object[$cls];}return null;}/*** 注冊對象* @param $cls* @param $obj* @return bool*/public static function register($cls, $obj){if (!is_object($obj) || isset(self::$_object[$cls])) {return false;}self::$_object[$cls] = $obj;return true;}/*** 銷毀對象* @param $cls*/public static function destory($cls){if (self::find($cls)) {unset(self::$_object[$cls]);}} }//創建一個 $db = Loader::loadObject("Database");
?
轉載于:https://www.cnblogs.com/leezhxing/p/3647369.html
總結
以上是生活随笔為你收集整理的基础设计模式:单例模式+工厂模式+注册树模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伙伴们在教父母用手机和平板时有没有什么好
- 下一篇: 梦想的地方!地球上最值得去的20个地方【