增强对象的功能:
-
代理模式:
-
概念:
- 真实对象:被代理的对象
- 代理对象
- 代理模式:达到增长对象的功能;
-
实现方式:
- 静态代理: 有一个类文件 .java描述代理模式
- 动态:带内存中形成代理类:
3:实现步骤:
代理对象和真实对象都实现相同的接口;
代理对象:=Proxy.newProxyInstance();
使用代理对象调用方法
增加方式:
- 增强参数列表
- 增加返回值类型
- 增强方法体执行逻辑
案例一:
public class demo01 { public static void main(String[] args) { lenovo lenovo = new lenovo(); System.out.println(lenovo.sale(3333)); System.out.println("--->>>"); saleComputer proxylenpvn = (saleComputer) Proxy.newProxyInstance(lenovo.getClass().getClassLoader(), lenovo.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName() .equals("sale")) { //方法体内容的改造 //方法体的参数改变 //增强返回值 double money = (double) args[0]; money = money * 0.44; System.out.println("送货上门"); Object invoke = method.invoke(lenovo, money);//==String sale = proxylenpvn.sale(3333); return invoke;//== System.out.println(sale); }else { Object invoke = method.invoke(lenovo, args); return invoke;//== System.out.println(sale); } } }); String sale = proxylenpvn.sale(3333); System.out.println(sale);//只有有了这一步才可以有上面的return正确返回结果; } }
案例二:
HttpServletRequest proxyreq = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("parameter")){ //增加返回值 //获取韩绘制 String value = (String) method.invoke(req, args); if (value != null) { for (String str:list ) { if (list .contains(value)){ value = value.replaceAll(str,"***"); } } } return value; } return method.invoke(req,args); } }); chain.doFilter(proxyreq, resp); // }
-
req.setPrameter();没有这个功能;可以用代理模式增加这个功能;req.getParameter();从这个已经有的功能增加代理模式;