博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式
阅读量:6070 次
发布时间:2019-06-20

本文共 1756 字,大约阅读时间需要 5 分钟。

hot3.png

   Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有

相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理
subject(抽象主题角色):
       真实主题与代理主题的共同接口
       package com.org.proxy;
public interface Subject {
    public  void sailBook();
}
       
RealSubject(真实主题角色):
       定义了代理角色所代表的真实对象。
package com.org.proxy;
public class RealSubject implements Subject {
    public void sailBook() {
        System.out.println("sailBook()");
    }
}
Proxy(代理主题角色): 含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真是主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。
package com.org.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MyHandler implements InvocationHandler {
    private RealSubject realSubject;
    
    public void setRealSubject(RealSubject realSubject) {
        this.realSubject = realSubject;
    }
    public Object invoke(Object proxy, Method method, Object[] args){
        Object result = null;
        dazhe();
        try {
            result = method.invoke(realSubject, args);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        give();
        return result;
    }
    
    public void dazhe() {
        System.out.println("dazhe()");
    }
    
    public void give() {
        System.out.println("give()");
    }
}
客户端
package com.org.proxy;
import java.lang.reflect.Proxy;
public class MainClass {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        MyHandler myHandler = new MyHandler();
        myHandler.setRealSubject(realSubject);
        
        Subject proxySubject = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(), realSubject.getClass().getInterfaces(), myHandler);
        proxySubject.sailBook();
    }
}

转载于:https://my.oschina.net/goudingcheng/blog/505630

你可能感兴趣的文章
处理excel表的列
查看>>
枸杞子也能控制脂肪肝
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>
lintcode:next permutation下一个排列
查看>>
python 递归
查看>>
一个想法(续二):换个角度思考如何解决IT企业招聘难的问题!
查看>>
tomcat指定配置文件路径方法
查看>>
linux下查看各硬件型号
查看>>