拦截过滤器模式 Intercepting Filter Pattern
说明
拦截过滤器模式,简称拦截器模式,是责任链模式的一种衍生模式。用于对应用程序的请求或响应做一些预处理/后处理。
结构中包含的角色
- 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) : 拦截请求。拦截请求并且做相关的处理。 登陆拦截器,未登陆会跳转到登陆页面。