php 設計模式 學習筆記

2021-06-01 00:46:01 字數 3132 閱讀 2184

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....