代理模式Proxy

代理模式:为其他对象提供一种代理以控制对这个对象的访问。

所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。

package com.qinsoft.design;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class ProxyClient
{
    
    public static void main(String[] args)
    {
        //静态代理
//        Passenger real = new RealPassenger();
//        Passenger proxy = new StaticProxy(real);
//        proxy.buyTicket();
        
        //动态代理
        DynamicProxy real = new DynamicProxy();
        Passenger passenger = (Passenger) real.obj(new RealPassenger());
        passenger.buyTicket();
    }
}
/**
 * 买票接口
 */
interface Passenger 
{
    void buyTicket();
}

//乘客实体
class RealPassenger implements Passenger 
{
    @Override
    public void buyTicket() 
    {
       System.out.print("购买了火车票");
    }
}

/**
 * 静态代理类
 */
class StaticProxy implements Passenger {
    Passenger passenger;

    public StaticProxy(Passenger p) 
    {
       this.passenger = p;
    }

    @Override
    public void buyTicket() 
    {
       System.out.println("通过代售点");
       passenger.buyTicket();
    }
}

/**
 * 用动态代理实现
 */
class DynamicProxy implements InvocationHandler {
    public Object obj;
    
    // 把obj交给代理类
    Object obj(Object obj) 
{
this.obj = obj; return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{ System.out.println(
"通过代理"); method.invoke(obj, args); return null; } }
原文地址:https://www.cnblogs.com/hnhcc39/p/2866156.html