1. 程式人生 > 實用技巧 >php 設計模式之 責任鏈

php 設計模式之 責任鏈



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. 使用場景

  1. if-else分支判斷場景
  2. 根據不同等級發放優惠券
  3. 字串一層一層過濾
  4. 請假審批