Java:静态代理

举例:

你:真实角色

婚庆公司:代理,帮你布置婚礼


代码演示:

package com.jiemyx.lambda;

public class StaticProxy {
    public static void main(String[] args) {
        You you = new You();
        WeddingCompany weddingCompany = new WeddingCompany(you);
        weddingCompany.happyMarry();

        System.out.println("============");

        //匿名类
        new WeddingCompany(new You()).happyMarry();

    }
}

interface Marry{
    void happyMarry();
}

//真实角色,你要结婚了,把布置婚礼的事情交给婚庆公司去做
class You implements Marry{
    @Override
    public void happyMarry() {
        System.out.println("布置婚礼");
    }
}

//代理角色,婚庆公司帮助你布置婚礼
class WeddingCompany implements Marry{
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void happyMarry() {
        this.target.happyMarry();
        after();
    }

    private void after() {
        System.out.println("婚礼后,跟客户收尾款");
    }

}

//静态代理模式总结
//真实对象和代理对象都要实现同一个接口
//代理对象代理真实角色

//好处:
//代理对象可以做很多真实对象做不了的事情
//真实对象专注做自己的事情

运行结果:

布置婚礼
婚礼后,跟客户收尾款

============
布置婚礼
婚礼后,跟客户收尾款


静态代理与Thread对比

package com.jiemyx.lambda;

public class StaticProxy2 {
    public static void main(String[] args) {
        //匿名类
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱你");
            }
        }).start();

        //Lambdab表达式简化后
        new Thread(()-> System.out.println("我爱你")).start();

        //静态代理与Thread对比
        //new Thread(()-> System.out.println("我爱你")).start();
        //new WeddingCompany(new You()).happyMarry();

    }
}

运行结果:

我爱你
我爱你

posted @ 2021-05-14 23:44  杰myx  阅读(45)  评论(0编辑  收藏  举报