說明
攔截過濾器模式,簡稱攔截器模式,是責任鏈模式的一種衍生模式。用於對應用程式的請求或響應做一些預處理/後處理。
結構中包含的角色
- Filter(抽象處理者)
- RegularFilter(具體處理者)
- FilterChain(責任鏈)
- FilterManager(鏈條管理者)
最小可表達程式碼
interface Filter
{
public function doFilter();
}
class RegularFilter implements Filter
{
public function doFilter()
{
echo '業務處理';
}
}
class FilterChain
{
private $filters = [];
public function addFilter(Filter $filter)
{
$this->filters[] = $filter;
}
public function doFilter()
{
foreach ($this->filters as $filter) {
$filter->doFilter();
}
}
}
class FilterManager
{
public $filterChain;
public function __construct()
{
$this->filterChain = new FilterChain();
}
public function addFilter(Filter $filter)
{
$this->filterChain->addFilter($filter);
}
public function doFilter()
{
$this->filterChain->doFilter();
}
}
$filterManager = new FilterManager();
$filter = new RegularFilter();
$filterManager->addFilter($filter);
$filterManager->doFilter();
實際應用場景
- Servlet Filter。
- SpringMVC Interceptor。
攔截器和過濾器的區別
過濾器(Filter) : 過濾資料。請求過濾引數。 攔截器(Interceptor) : 攔截請求。攔截請求並且做相關的處理。 登陸攔截器,未登陸會跳轉到登陸頁面。
本作品採用《CC 協議》,轉載必須註明作者和本文連結