zoukankan      html  css  js  c++  java
  • 设计模式-代理模式

    定义: 为其他对象提供一种代理来控制这个对像的访问.

    IGamePlayer : 抽象的接口

    GamePlayer  : 实际的业务逻辑实现对象

    GameProxy : 代理对象.

    一 . 普通代理:

     代理类和被代理类继承同一个接口,代理类包含被代理类,用代理类执行时实际跑被代理类的方法。

    public class Proxy implements Subject {
    private RealSuject rSub;

    public Proxy(){
    rSub = new RealSuject();
    }
    public void request(String s) {
    /*此处新增RealSuject,不考虑多线程*/
    if(rSub == null){
    rSub = new RealSuject();
    }
    System.out.println("proxy function before call the real object");
    rSub.request(s);
    System.out.println("proxy function after call the real object");
    }

    }

    二.强制代理类

    类接口包含判断是否是代理的方法,被代理类只有指定了代理才能被访问,否则不能被访问。

    三.动态代理

    public class MyInvocationHandler implements InvocationHandler {

    private Object p ;
    public MyInvocationHandler(Object pro)
    {
    this.p = pro;
    }
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    // TODO Auto-generated method stub
    return method.invoke(this.p, args);
    }

    }

    public class DynamicProxy<T> {
    public static <T>T newProxyInstance(ClassLoader cl,
    Class<?>[]interfaces,MyInvocationHandler mih){
    return (T)Proxy.newProxyInstance(cl, interfaces, mih);
    }
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Subject s = new RealSuject();
    MyInvocationHandler mh = new MyInvocationHandler(s);
    Subject proxy = DynamicProxy.newProxyInstance(s.getClass().getClassLoader(),
    s.getClass().getInterfaces(), mh);
    proxy.request("hello");
    }

    使用的是java的代理基本方法。Proxy InvocationHandler

  • 相关阅读:
    Hibernate-查询缓存
    Hibernate-二级缓存 sessionFactory
    Hibernate-二级缓存策略
    Hibernate-一级缓存session
    缓存和连接池的区别
    Hibernate-一对多的关系维护
    Hibernate-缓存
    Java基础-jdk动态代理与cglib动态代理区别
    Java基础-CGLIB动态代理
    Java基础-静态代理与动态代理比较
  • 原文地址:https://www.cnblogs.com/thinkqin/p/3819286.html
Copyright © 2011-2022 走看看