当前位置:   article > 正文

设计模式の拦截过滤器模式_过滤器与拦截器的设计模式

过滤器与拦截器的设计模式
设计模式简介

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

拦截过滤器模式

拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。

过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
Target - Target 对象是请求处理程序。
过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
客户端(Client) - Client 是向 Target 对象发送请求的对象。
  • 1
  • 2
  • 3
  • 4
  • 5
实现

在这里插入图片描述
创建接口并实现

public interface Filter {
	public void handle(String msg);
}

  • 1
  • 2
  • 3
  • 4

public class LogFilter implements Filter{

	@Override
	public void handle(String msg) {
		System.out.println("LogFilter:"+msg);
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

public class ErrFilter implements Filter{

	@Override
	public void handle(String msg) {
		System.out.println("ErrFilter:"+msg);
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

当做请求处理类

public class Target {
	public void index(String msg) {
		System.out.println("这个类只是对请求的"+msg+"做出处理");
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

拦截器


public class FilterChain {
	public List<Filter> list = new ArrayList<>();
	private Target target;
	
	public void addFilter(Filter filter) {
		list.add(filter);
	}
	
	public void handle(String msg) {
		for (Filter filter : list) {
			filter.handle(msg);
		}
		target.index(msg);
	}
	
	public void setTarget(Target target) {
		this.target = target;
	}
	
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

拦截器管理器

public class FilterManager {
	
	FilterChain filterChain;
	Target target;
	public FilterManager(Target target) {
		this.filterChain = new FilterChain();
		filterChain.setTarget(target);
	}
	
	public void setFilter(Filter filter) {
		filterChain.addFilter(filter);
	}
	
	public void filterHandle(String msg) {
		filterChain.handle(msg);
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

模拟请求

public class Client {
	public static void main(String[] args) {
		FilterManager filterManager = new FilterManager(new Target());
		filterManager.setFilter(new LogFilter());
		filterManager.setFilter(new ErrFilter());
		filterManager.filterHandle("123");
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果

LogFilter:123
ErrFilter:123
这个类只是对请求的123做出处理
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/482040
推荐阅读
相关标签
  

闽ICP备14008679号