java设计模式之代理模式(8)
来源:互联网 发布:php开源网站 编辑:程序博客网 时间:2024/05/01 21:48
代理模式就是,不直接调用目标函数,而是通过一个代理类来调用。
它的类继承关系和装饰模式很类似。但是它们的目的不一样。
代理模式不会增加新的功能,只是在调用和被调用之间加入代理层。而装饰模式旨在增加新功能。
看代码:
package com.pattern.struct.proxy;public interface Subject {public void request();}
package com.pattern.struct.proxy;public class RealSubject implements Subject {@Overridepublic void request() {System.out.println("-------------a");}}
package com.pattern.struct.proxy;public class SubjectProxy implements Subject{private Subject subject;public SubjectProxy(Subject subject){this.subject = subject;}@Overridepublic void request() {doBefor();this.subject.request();doAfter();}private void doBefor(){System.out.println("-----------before------------");}private void doAfter(){System.out.println("-----------after------------");}}
package com.pattern.struct.proxy;public class StartUp {public static void main(String...args){Subject subject = new RealSubject();Subject proxy = new SubjectProxy(subject);proxy.request();}}
java内置了动态代理,常见的AOP事务处理就是使用动态代理实现的。
package com.pattern.struct.proxy.dynamic;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import com.pattern.struct.proxy.Subject;public class SubjectHandler implements InvocationHandler{private Subject subject;public SubjectHandler(Subject subject){this.subject = subject;}@Overridepublic Object invoke(Object obj, Method method, Object[] aobj)throws Throwable {System.out.println("do before...");method.invoke(subject, aobj);System.out.println("do after...");return null;}}
package com.pattern.struct.proxy.dynamic;import java.lang.reflect.Proxy;import com.pattern.struct.proxy.RealSubject;import com.pattern.struct.proxy.Subject;public class StartUp {public static void main(String[] args) {RealSubject realSubject = new RealSubject();Subject subject = (Subject) Proxy.newProxyInstance(realSubject.getClass().getClassLoader(), realSubject.getClass().getInterfaces(), new SubjectHandler(realSubject));subject.request();}}
0 0
- 设计模式之代理模式(java)
- java设计模式之代理模式(8)
- java设计模式之代理模式(静态代理)
- JAVA设计模式之【代理模式】一(静态代理)
- Java设计模式之代理设计模式
- Java设计模式之代理
- Java设计模式之代理
- java设计模式之代理
- java之代理设计模式
- java之代理设计模式
- Java设计模式之代理模式
- Java设计模式之计数代理模式
- JAVA设计模式之代理模式
- JAVA设计模式之代理模式
- java设计模式之代理模式
- Java 设计模式 之 代理模式
- java设计模式之代理模式Proxy
- 设计模式之代理模式 java (1)
- org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
- JSTL <fmt>Date、Number格式化显示
- hd 1048 The Hardest Problem Ever
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- SQL join连接
- java设计模式之代理模式(8)
- 云计算技术解析 Amazon EC2 的幕后
- boost
- 【6 Weeks。一个肚子两个大。】
- 模拟鼠标的单双击
- hdu 大菲波数
- KM算法(最优匹配)
- 安卓实现选项卡
- 使用eclipse的MAT对程序内存进行分析