php 有如下幾種設計模式:
初聽到設計模式可能讓你覺得很抽象,其實設計模式就是對常見程式設計問題的靈活解決方案。
1、工廠模式(factory)
他之所以被成為工廠模式是因為他負責「生產「 物件,看看下面的例子
<?php
class factoryelse} }
?>
你如何呼叫呢:
<?php
$factorymql= factory::factory("mysql");
?>
看到了吧,那個引數,我這裡是"mysql"實際上就是要生成物件的類的名稱。
2、單例模式(singleton)
用於為乙個類生成乙個唯一的物件,使用單例模式生成乙個物件後,該物件可以被其他眾多物件所使用。
例如:
<?php
class singleton
public static function singleton()
return self::$ss;
} public static function normal()
public static function __clone()
} ?>
訪問舉例:
<?php
$test = singleton::singleton;
$test->normal();
?>
舉例說明:由於上面的類中構造方法被宣告成了private,所以我們無法用new來例項化這個類,我們只能通過訪問singleton方法(例如:$test = singleton::singleton)來獲得累的物件,然後我們在用生成的物件,我這個例子裡是$test來訪問類中的其他方法。例如($test->normal())。禁止轉殖單例物件。
3、觀察者模式
即乙個物件通過新增乙個方法,使自身變得可觀察。當自身發生改變時,它會傳送訊息給已註冊的觀察者。觀察者收到資訊以後執行的操作可以完全與被觀察者無關。換句話說,觀察者觀察被觀察者,被觀察者發生改變時,通知觀察者,收到通知以後觀察者就可以做自己想做的事情啦。
舉例如下:
<?php
inte***ce iobserver
inte***ce iobserverable
class userlist implements iobserverable
} public function addobserver($observer)
}class userlistlogger implements iobserver
}$ul = new userlist();
$ul->addobserver(new userlistlogger());
$ul->addcustomer("jack");
?>
看到了吧,在上個例子中,類userlistlogger 就相當於乙個觀察者,當類userlist 新增新的使用者時(呼叫 addcustomer($name))方法,他會在該方法內部呼叫觀察者的onchanged()方法,以此來通知觀察者。
4、命令鏈模式
命令鏈模式是通過乙個物件傳送訊息、命令和請求。或者通過一組處理程式傳送任意內容。每個處理程式都會自己判斷自己能否處理請求。如果可以則進行處理。
舉例程式:
<?php
inte***ce icommand
class commandchain
public function runcommand($name,$args)
} }}
class usercommand implements icommand }
class mailcommand implements icommand }
$cc = new commandchain();
$cc->addcommand(new usercommand);
$cc->addcommand(new mailcommand);
$cc->runcommand('adduser',null);
$cc->runcommand('mail',null);
?>
5、策略模式
例如如果你想使用不同的排序方式對程式搜尋到的結果進行排序,策略模式是個不錯的選擇,你可以選擇不同的排序策略
舉例如下:
<?php
inte***ce istrategy
class findafterstrategy implements istrategy
public function filter($record)
}class randomstrategy implements istrategy
}class userlist
} }
public function add($name)
public function find($filter)
} return $recs; }}
$ul = new userlist(array("andy","jack","lori","megan"));
$f1 = $ul->find(new findafterstrategy("j"));
echo "f1";
var_dump($f1);
echo "
";$f2 = $ul->find(new randomstrategy());
echo "f2
";var_dump($f2);
?>
看到啦,在上面這個例子中程式選用了策略一排序方式:
strcmp($this->_name,$record)<=0;
或者策略二排序方式:
return rand(0,1)>=0.5;
好啦,寫完啦,上面是我學習php常用設計模式的筆記
參考了php手冊和jack d herrington 的《五種常見的 php 設計模式》,在這裡非常感謝
PHP設計模式學習筆記
當多個地方需要例項化乙個類的時候,為了滿足之後可能需要做修改的可能的時候可以使用工廠模式。即在乙個類中的乙個方法例項化 之後需要修改只要修改該函式即可。資料庫鏈結,單例模式,將建構函式宣告為私有 遮蔽在其他地方例項化資料庫連線,宣告乙個方法建立例項 new self 即定義乙個受保護的屬性陣列,當呼...
PHP學習筆記2 設計模式
工廠設計模式 設計模式 design pattern 是一套反覆被使用 多數人知曉的 經過分類編目的 設計經驗的總結。三私一公 私有的靜態的儲存物件的屬性 私有的構造方法,阻止類外new物件 私有的轉殖方法,阻止類外clone物件 共有的靜態的建立物件的方法 單例設計模式的核心 單例設計模式的核心 ...
PHP設計模式學習筆記 3 基本設計模式概念
mvc的特點是 通過檢視和模型之間建立訂閱 通知協議,實現檢視和模型的解耦。從mvc開始討論設計模式中的各種工具,應為大多數設計模式都是與mvc有關的,只有某些部分是與mvc沒關。ivehicle.php inte ce ivehicle car.php include once ivehicle....