装饰者模式
来源:互联网 发布:淘宝自行车专卖店 编辑:程序博客网 时间:2024/05/19 16:50
保持被包装对象的原有信息,又可以对某个/某些方法进行改写。
口诀:
1、编写一个类,实现与被包装类(数据库驱动对Connection的实现)相同的接口。(使这个类和数据库的驱动实现有着相同的行为)
2、定义一个变量,引用被包装类的实例。
3、定义构造方法,传入被包装类的实例。
4、对于要改写的方法,编写自己的代码即可。
5、对于不需要改写的方法,调用原有对象的对应方法。
public class MyConnection1 implements Connection { private Connection conn;//原来的conn,针对所有的驱动 private LinkedList<Connection> pool;//原来的池 public MyConnection1(Connection conn,LinkedList<Connection> pool) { this.conn = conn; this.pool = pool; } //还回池中 public void close() throws SQLException{ pool.addLast(conn); }
过滤器中的使用
//实现解决全站乱码问题的过滤器public class AllCharacterEncodingFilter implements Filter { private String encoding = "UTF-8";//设置默认编码 public void init(FilterConfig filterConfig) throws ServletException { //获取配置文件中的信息,初始化信息encoding的值 String value = filterConfig.getInitParameter("encoding"); if(value!=null){ encoding = value; } } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //必须转成HTTP协议的request类,因为放行后的servlet有可能会使用http协议的方法 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; //解决POST请求参数中文编码问题 request.setCharacterEncoding(encoding); //输出编码及通知客户端编码 response.setCharacterEncoding(encoding); response.setContentType("text/html;charset="+encoding); //写一个包装类,对request进行包装,包装类必须把被包装的对象传进来; MyHttpServletRequest mrequest = new MyHttpServletRequest(request); chain.doFilter(mrequest, response); } public void destroy() { }}class MyHttpServletRequest extends HttpServletRequestWrapper{ private HttpServletRequest request;//引用原有对象 public MyHttpServletRequest(HttpServletRequest request) { super(request); this.request=request; } //覆盖方法 public String getParameter(String name) { //获取name的值,后续使用 String value = request.getParameter(name); if(value==null){ return null; } //只解决GET请求参数编码问题 //获取提交方式 String method = request.getMethod(); //因为浏览器提交的方法名大小写不同,所以比较的时候需要忽略大小写 if("get".equalsIgnoreCase(method)){ try { //Tomcat的默认编码是ISO-8859-1,所以设置编码的时候需要注意 value = new String(value.getBytes("ISO-8859-1"), request.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return value; }} 设置配置文件 <filter> <filter-name>AllCharacterEncodingFilter</filter-name> <filter-class>com.itheima.filter.AllCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>AllCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 二:脏话过滤器DirtyWordsFilter(注意要有解决全站乱码的过滤器)public class DirtyWordsFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest arg1, ServletResponse arg2, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg1; HttpServletResponse response = (HttpServletResponse) arg2; //对request进行包装,过滤 DwHttpServletRequest dwrequest = new DwHttpServletRequest(request); chain.doFilter(dwrequest, response); } public void init(FilterConfig filterConfig) throws ServletException { }}class DwHttpServletRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; public DwHttpServletRequest(HttpServletRequest request){ super(request); this.request = request; } public String getParameter(String name) { String value = request.getParameter(name); if(value==null){ return null; }//定义脏话字典 String[] dws = new String[]{"畜生","禽兽","SB"}; for(String s:dws){ //判断value里面是否包含脏话字典里的词 if(value.contains(s)){ // value = value.replace(s, "**"); } } return value; }}
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- BZOJ 3343: 教主的魔法
- 网络基础知识 ping & ipconfig
- ConcurrentModificationException异常分析
- ios 蓝牙控制
- linux下安装软件的常用方法
- 装饰者模式
- c++的输入输出。
- Leetcode-198. House Robber,213. House Robber II
- BZOJ2333: [SCOI2011]棘手的操作
- 项目中xml获取所有子节点
- 虚幻引擎源码分析(3)
- 使用ConditionalRemoval或RadiusOutlierRemoval移除离群点
- 一起来写ftp server 01 -- 简易版本
- Java提升篇(一)---内部类