php 設計模式之 責任鏈
阿新 • • 發佈:2020-12-30
1. 責任鏈模式
責任鏈模式,屬於物件行為型的設計模式
使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係
將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止
2. 實列
abstract class FilterChain { protected $next; public function setNext($next) { $this->next = $next; } abstract public function filter($message); } class FilterStrict extends FilterChain { // 鏈條 public function filter($message) { foreach (['槍X', '彈X', '毒X'] as $v) { if (strpos($message, $v) !== false) { throw new \Exception('該資訊包含敏感詞彙!'); } } if ($this->next) { return $this->next->filter($message); } else { return $message; } } } class FilterMobile extends FilterChain { // 鏈條 public function filter($message) { $message = preg_replace("/(1[3|5|7|8]\d)\d{4}(\d{4})/i", "$1****$2", $message); if ($this->next) { return $this->next->filter($message); } else { return $message; } } } $f1 = new FilterStrict(); // 鏈條 $f2 = new FilterMobile(); // 鏈條 $f1->setNext($f2); $m1 = "現在開始測試鏈條1:語句中不包含敏感詞,需要替換掉打架這種詞,然後給手機號加上星:13333333333,這樣的資料才可以對外展示哦"; echo $f1->filter($m1);
3. 使用場景
- if-else分支判斷場景
- 根據不同等級發放優惠券
- 字串一層一層過濾
- 請假審批