类反射机制+责任链的设计模式demo
来源:互联网 发布:昌硕 软件测试工程师 编辑:程序博客网 时间:2024/06/05 02:51
直接贴代码:
反射工具包
package com.zzk.cn;
import java.lang.reflect.Method;
import java.util.List;
/**
* Object 处理类
*
* @author zhengke.zzk
*/
public class ObjectInstance {
/**
* 根据class name 获得 object
*
* @param className
* @return
*/
public Object getObjectByClassName(String className) {
try {
Class cls = Class.forName(className);
return cls.newInstance();
} catch (Exception e) {
throw new RuntimeException("ObjectInstance Get Class error:" + e);
}
}
/**
* 执行方法
*
* @param className
* @param methodName
* @return
*/
public Object getMethodInvoke(String className, String methodName, Object object) {
if (object == null) {
throw new RuntimeException("ObjectInstance Get Method Invoke object is null");
}
try {
Method method = Class.forName(className).getMethod(methodName, new Class[] {});
return method.invoke(object);
} catch (Exception e) {
throw new RuntimeException("ObjectInstance Get Method Invoke error:" + e);
}
}
/**
* 执行方法
*
* @param className
* @param methodName
* @return
*/
public List<Object> getListByClassName(String className, String methodName, Object object) {
if (object == null) {
throw new RuntimeException("ObjectInstance Get Method Invoke object is null");
}
try {
Method method = Class.forName(className).getMethod(methodName, new Class[] {});
return (List<Object>) method.invoke(object);
} catch (Exception e) {
throw new RuntimeException("ObjectInstance Get Method Invoke error:" + e);
}
}
}
接口
package com.zzk.cn;
public interface Filter {
public void doFilter(Request request, Response response, FilterChain chain);
}
请求:
package com.zzk.cn;
public class Request {
String requestStr;
public String getRequestStr() {
return requestStr;
}
public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
响应:
package com.zzk.cn;
public class Response {
String responseStr;
public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
}
责任链
package com.zzk.cn;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter {
List<Filter> filters = new ArrayList<Filter>();
int index = 0;
public FilterChain addFilter(Filter f) {
this.filters.add(f);
return this;
}
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
if (index == filters.size())
return;
Filter f = filters.get(index);
index++;
f.doFilter(request, response, chain);
}
}
策略一:
package com.zzk.cn;
public class FaceFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.requestStr = request.getRequestStr().replace(":)",
"^V^-------FaceFilter");
chain.doFilter(request, response, chain);
response.responseStr += "-------FaceFilter";
}
}
策略二:
package com.zzk.cn;
/**
* 过滤HTML中的脚本元素
* @author lcq
*
*/
public class HTMLFilter implements Filter {
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
request.requestStr = request.getRequestStr().replace("<", "[")
.replace(">", "] --------HTMLFilter");
chain.doFilter(request, response, chain);
response.responseStr += "--------HTMLFilter";
}
}
策略三:
package com.zzk.cn;
public class SesitiveFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.requestStr = request.getRequestStr().replace("敏感", " ")
.replace("猫猫", "haha------SesitiveFilter");
chain.doFilter(request, response, chain);
response.responseStr += "------SesitiveFilter";
}
}
测试方法:
package com.zzk.cn;
public class Main2 {
public static void main(String[] args) {
String message = "敏感词汇,重庆,<script> 躲猫猫 :)";
Request request = new Request();
request.setRequestStr(message);
Response response = new Response();
response.setResponseStr("response");
ObjectInstance objectInstance = new ObjectInstance();
Object object = objectInstance.getObjectByClassName("com.zzk.cn.HTMLFilter");
FilterChain fc = new FilterChain();
fc.addFilter((Filter)object);
fc.addFilter(new SesitiveFilter());
FilterChain fc2 = new FilterChain();
fc2.addFilter(new FaceFilter());
fc.addFilter(fc2);
fc.doFilter(request, response,fc);
System.out.println("request = " + request.getRequestStr());
System.out.println("response = " + response.getResponseStr());
}
}
0 0
- 类反射机制+责任链的设计模式demo
- Android的设计模式-责任链模式
- 责任链设计模式
- 责任链设计模式
- 设计模式---责任链
- 责任链设计模式
- 设计模式----责任链
- 设计模式-责任链
- 责任链设计模式
- 责任链设计模式
- 设计模式:责任链
- [设计]责任链模式
- 设计模式--责任链
- 责任链设计模式
- 设计模式-责任链设计
- 设计模式----责任链模式
- 【设计模式】责任链模式
- 设计模式---责任链模式
- Android ActionBar应用实战,高仿微信主界面的设计
- SharePoint 2013 SPDistributedCacheService 介绍与配置
- 周鸿祎:互联网成功十大案例
- iOS 数据保存几种方式总结
- [读书笔记]深入解析MapReduce架构设计与实现原理——CH4 Hadoop RPC基本框架
- 类反射机制+责任链的设计模式demo
- 给android添加系统属性:Settings.system和SystemProperties
- mysql修改表、字段、库的字符集
- HDU 1708 Fibonacci String(数学题)
- C/C++求一个整数的二进制中1的个数
- IP校验和
- uva 1479 - Graph and Queries(伸展树)
- Coding模式开启
- wait / notify / notifyAll 和 synchronized method / block