java设计模式之五:代理模式
来源:互联网 发布:淘宝图片空间一键删除 编辑:程序博客网 时间:2024/05/22 14:13
代理模式顾名思义:一个人代替一个人去干一些事,比如说大家熟知的武林外传中就有小六替秀才表白的情节,但是除了替秀才表白,还能在这上面进行一些扩展。接下来我们来了解下代理模式吧。
代理模式一般分为静态代理模式和动态代理模式。静态代理如果需要在接口中添加方法,你就必须进行大批量的修改,所以这不太适合需要经常修改需求的场景。而动态代理模式则是利用了Java的反射机制实现的一种。
静态代理模式:
第一步:因为代理一般都是行为,所以创建的是接口而不是抽象类。
第二步:创建目标对象(也就是被代理对象)实现接口;同样创建代理对象实现接口,紧接着在构造函数中实现目标对象引用的赋值。
第三步:在客户端实现测验。
public interface ProxyInterface {public void login();public void regist();public void exit();}
public class Goal implements ProxyInterface{@Overridepublic void login() {System.out.println("正在登录");}@Overridepublic void regist() {System.out.println("正在注册");}@Overridepublic void exit() {System.out.println("正在推出");} }
public class StaticProxy implements ProxyInterface{private ProxyInterface goal; //这里是抽象的,从而让代理类和委托类彼此不熟悉,只有第三方了解,也就是客户端public StaticProxy(ProxyInterface goal){this.goal=goal;}@Overridepublic void login() {goal.login(); //代替目标进行登录}@Overridepublic void regist() {goal.regist(); //代替目标进行注册}@Overridepublic void exit() {goal.exit();}}
public void test() {StaticProxy proxy=new StaticProxy(new Goal());proxy.login();proxy.regist();}
这样就完成了代理类实现被代理类的功能,还能在这上面进行方法的扩展。
动态代理
通过依靠代理类:.Java.lang.reflect.Proxy
public class Dynamicproxy implements InvocationHandler{private ProxyInterface goal;public Dynamicproxy(ProxyInterface goal) {this.goal=goal;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("预处理");method.invoke(goal, args);System.out.println("后续处理任务");return null;}}
public void test1() {Goal goal=new Goal(); Dynamicproxy dynamicproxy=new Dynamicproxy(goal); //生成代理类对象 ProxyInterface proxy=(ProxyInterface) Proxy.newProxyInstance (ClassLoader.getSystemClassLoader(), new Class[]{ProxyInterface.class},dynamicproxy); proxy.login(); proxy.exit();}这样在接口中添加或者修改接口中的方法后,不需要再去代理类和被代理类中修改了。
缺点:不能在各自的方法中实现各自的扩展。就像上面,所有的方法调用前后都会输出“预处理”和“后序处理任务”
阅读全文
1 0
- java设计模式之五:代理模式
- 浅析JAVA设计模式之代理模式(五)
- 设计模式之五 --- 代理(Proxy)模式
- 设计模式之五 --- 代理(Proxy)模式
- 设计模式之五 --- 代理(Proxy)模式
- 设计模式之五 --- 代理(Proxy)模式
- 设计模式培训之五:代理模式
- 设计模式培训之五:代理模式
- 设计模式系列之五:代理模式
- 设计模式之五 --- 代理(Proxy)模式
- Java设计模式之代理设计模式
- 设计模式五:代理模式
- Java设计模式之代理
- Java设计模式之代理
- java设计模式之代理
- java之代理设计模式
- java之代理设计模式
- Java设计模式之代理模式
- Runloop
- Excel 技巧百例:汉字列的合并
- 提高数据库效率的方法
- 堆和栈的区别
- HDU6034 Balala Power!【贪心】
- java设计模式之五:代理模式
- Leetcode OJ 125 Valid Palindrome [Easy]
- OpenCV图像变换(仿射变换与透视变换)
- 【条理】Unity 脚本生命周期流程图
- hdu2028 Lowest Common Multiple Plus(C语言)
- 数据结构与算法(二叉树)
- SQL数据库单行注释与多行注释
- STL容器vector的内存问题
- STL学习之八:priority_queue用法示例