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

  • 相关阅读:
    CentOS 6.3 下编译Nginx(笔记整理)
    XMPP协议相关基础概念(Strophe学习笔记)
    StackMapTable format error
    hibernate的子查询
    strophe与openfire模拟的XMPP简单hello程序
    Strophe.Status的所有值
    博客园添加SyntaxHighlighter
    P5395 【模板】第二类斯特林数·行
    test20191001
    test20190829
  • 原文地址:https://www.cnblogs.com/thinkqin/p/3819286.html
Copyright © 2011-2022 走看看