代理模式

静态代理:

//代理类和被代理类都需要实现的接口
public interface Movie {
    void play();
}

//被代理的类,实际的操作所在对象
public class RealMovie implements Movie{
    @Override
    public void play() {
        System.out.println("you are seeing moving");
    }
}

//代理类,用户去调用的是这个类,这个类对象里面再去调用真实操作的对象
public class Ciema implements Movie{    
    RealMovie movie;
    public Ciema(RealMovie realMovie) {
        super();
        this.movie=realMovie;
    }
    @Override
    public void play() {
        adFunc();
        movie.play();
        adFunc();
    }
    private void adFunc() {
        System.out.println("guanggao...");
    }
}

public class Test {
    public static void main(String[] args) {
        RealMovie realMovie=new RealMovie();    
        Movie movie=new Ciema(realMovie);
        movie.play();
    }
}

 动态代理

public interface SellWine {
    void mainJiu();
}

public class MaotaiJiu implements SellWine{
    @Override
    public void mainJiu() {
        System.out.println(" sell maotai");
    }
}

public class GuitaiA implements InvocationHandler{   
    private Object pingpai;   
    public GuitaiA( Object pingpai) {
        this.pingpai=pingpai;
    }
    // InvocationHandler 内部只是一个 invoke() 方法,正是这个方法决定了怎么样处理代理传递过来的方法调用
    // proxy 代理对象
    // method 代理对象调用的方法
    // args 调用的方法中的参数
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println(" guitai is :" +this.getClass().getSimpleName());
        method.invoke(pingpai, args);
        System.out.println("sell ending ");
        return null;
    }
}

public class Test {
    public static void main(String[] args) {
        MaotaiJiu maotaiJiu = new MaotaiJiu();
        InvocationHandler jingxiao1 = new GuitaiA(maotaiJiu);
        // loader 类加载器
        // interfaces 代码要用来代理的接口
        // h 一个 InvocationHandler 对象
        SellWine dynamicProxy = (SellWine) Proxy.newProxyInstance(MaotaiJiu.class.getClassLoader(),
                MaotaiJiu.class.getInterfaces(), jingxiao1);
        dynamicProxy.mainJiu();
    }
}

参考:https://blog.csdn.net/briblue/article/details/73928350

          https://www.cnblogs.com/cenyu/p/6289209.html

转载于:https://www.cnblogs.com/yanliang12138/p/10331154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值