本文解釋並演示了責任鏈設計模式。
鍵概念
責任鏈(COR)是一種行為設計模式,可以通過一系列處理對象(處理程序)路由請求。 當不知道適當的處理程序,需要自動處理程序選擇,或者請求必須遵循優先的鏈條時,這一點特別有用。>。
cor與其他模式(例如復合模式)很好地集成,從而實現了統一的處理程序處理和請求轉發。它的柔性結構可促進鬆散的耦合和適應性。可以使用用於對象實例化的服務容器和用於存儲和重用相同請求的響應的緩存機制來增強性能。
定義通過將請求傳遞到一系列處理程序對象,來處理一個請求。 根據實施,可以由單個處理程序或幾個處理程序來處理請求。 所有處理人員都參加鏈條。
>簡單示例包括:ATM交易(PIN輸入,提款金額,收據打印)和服務台呼叫(菜單導航,指導步驟)。 參與者
核心組件是:
>處理程序:
定義了用於處理請求的接口。 這可以是一個抽像類,可選地提供默認方法和後繼分配。
>處理程序選擇是自動的(例如,記錄)。 處理程序提前未知(例如,異常處理)。 >
>請求必須遵循特定的,可能動態的優先順序(例如,事件或命令傳播)。
這可以最大程度地減少混凝土處理程序中的方法,從而增強凝聚力。 進一步的細化可能涉及結構化的
對像或與其他模式集成。<code class="language-php"><?php abstract class BasicHandler { private $successor = null; public function setSuccessor(BasicHandler $handler) { $this->successor = $handler; } abstract public function handle($request); } class FirstHandler extends BasicHandler { public function handle($request) { // Process request... Then optionally: if ($this->successor) { return $this->successor->handle($request); } return null; // Or a response } } // ... SecondHandler, ThirdHandler classes ... $first = new FirstHandler(); $second = new SecondHandler(); $third = new ThirdHandler(); $first->setSuccessor($second); $second->setSuccessor($third); $result = $first->handle($request); ?></code>
鏈構型
分開鏈配置可提高代碼的清晰度和可維護性。 依賴注入可能使用YAML配置文件,提供了一種干淨的方法:
<code class="language-php"><?php abstract class AdvancedHandler { private $successor = null; final public function setSuccessor(AdvancedHandler $handler) { if ($this->successor === null) { $this->successor = $handler; } else { $this->successor->setSuccessor($handler); } } final public function handle($request) { $response = $this->process($request); if ($response === null && $this->successor !== null) { return $this->successor->handle($request); } return $response; } abstract protected function process($request); } class FirstHandler extends AdvancedHandler { protected function process($request) { // Process request... return null to pass to successor, or a response } } // ... SecondHandler, ThirdHandler classes ... $first = new FirstHandler(); $second = new SecondHandler(); $third = new ThirdHandler(); $first->setSuccessor($second); $first->setSuccessor($third); // Adds to the end of the chain $result = $first->handle($request); ?></code>性能優化
Response
>對於具有復雜處理程序和頻繁請求的關鍵績效應用程序,請考慮:
AdvancedHandler
>
結論
cor是一種強大的模式,甚至允許鏈條鏈。 在促進鬆散耦合的同時,仔細的設計對於避免潛在問題至關重要。 在實施COR之前,徹底分析您的問題,密切關注處理程序的定義,請求/響應互動以及潛在的性能瓶頸。>
常見問題(常見問題解答)(它們在原始文本中已經很好地完成了,所以我不會在這裡重複它們。原始文本提供了出色的答案。)
以上是責任鏈簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!