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

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/thinkqin/p/3819286.html
Copyright © 2011-2022 走看看