其他分享
首页 > 其他分享> > 设计模式系列《代理模式》

设计模式系列《代理模式》

作者:互联网

代理模式

代理模式说白了就是你要做什么,就请个人帮你做。

代理模式很容易和修饰器模式弄混,我这里提一嘴:

相同点:

不同点

需要看代理模式的可以看我的这个文章:装饰器模式

静态代理模式

静态代理模式就是把本体类传进代理类里,让代理类帮我们做增强行为。

public interface Programmer {
//    身为一个程序猿必须会写代码
    void coding();
}

public class TestStaticProxy {
    public static void main(String[] args) {
        ZSP zsp = new ZSP();
        Programmer java3y = new Java3y(zsp);
        java3y.coding();
    }
}

透明代理模式

透明代理和静态代理的不同就是不需要传递对象给构造方法了,直接在代理类中生成需要方法增强的对象。

举例:3Y看我写的非常好(自吹的),但是就没人看,于是以后每天都帮我点赞,不帮别人点赞了

public class Java3y implements Programmer{
    private ZSP zsp;
//透明代理就是:3Y看我写的非常好(自吹的),
// 但是就没人看,于是以后每天都帮我点赞,不帮别人点赞了
    public Java3y() {
        this.zsp = new ZSP();
    }
    public void like(){
        System.out.println("Java3y以后只为我点赞,不帮别人点赞了~");
    }
    @Override
    public void coding() {
        zsp.coding();
        like();
    }
}
public class TestStaticProxy {
    public static void main(String[] args) {
        Programmer java3y = new Java3y();
        java3y.coding();
    }
}

代理模式自定义方法

就是透明模式的功能增强,加了点功能。

举例:自定义代理就是3Y一直给我点赞,导致看我的人越来越多(并没有),然后3Y就想要向我收费了(也没有);

package custom_proxy;

public class Java3y implements Programmer {
    private ZSP zsp;
//自定义代理就是3Y一直给我点赞,导致看我的人越来越多(并没有)
//    然后3Y就想要向我收费了(也没有)
    public Java3y() {
        this.zsp = new ZSP();
    }
    public void like(){
        System.out.println("Java3y以后只为我点赞,不帮别人点赞了~");
    }
    public void getMoney(){
        System.out.println("现在点赞要贰佰~");
    }
    @Override
    public void coding() {
        zsp.coding();
        like();
        getMoney();
    }
}

动态代理

动态代理运用的是java自带的一个API,即Proxy。

举例:因为3Y要钱(并没有),所以我交不起钱了,只能请水军。

public class Dynamic_Proxy {
    public static void main(String[] args) {
        ZSP zsp = new ZSP();
        Programmer  programmerWaterArmy  = (Programmer) Proxy.newProxyInstance(zsp.getClass().getClassLoader(), zsp.getClass().getInterfaces(), ((proxy, method, args1) -> {
            if (method.getName().equals("coding")) {
                method.invoke(zsp, args);
                System.out.println("水军,来水评论了");
            } else {
                return method.invoke(zsp, args);
            }
            return null;
        }));
        programmerWaterArmy.coding();
    }
}

这个方法需要传入的三个参数分别是:

动态代理和静态代理的区别:

代理模式很容易和修饰器模式弄混,我这里提一嘴:

相同点:

不同点

需要看代理模式的可以看我的这个文章:装饰器模式

标签:zsp,Java3y,void,代理,模式,系列,设计模式,public
来源: https://blog.csdn.net/qq_42388853/article/details/117754728