静态代理(Thread)

实现静态代理对比Thread

案例:婚介所办理结婚

package com.xiaoxianshuo.proxy;

public class StaticProxy {
    public static void main(String[] args) {
        You you = new You(); //你要结婚
        //Thread
        new Thread(()-> System.out.println("我爱你!")).start();
        new WeddingCompany(new You()).NewMarry();

        //静态代理
        //WeddingCompany weddingCompany = new WeddingCompany(you);
        //weddingCompany.NewMarry();
    }
}
//1.定义结婚接口
interface Marry{
    //新婚方法
    void NewMarry();
}
//2.结婚接口实现类重写结婚方法(真实角色,你去结婚)
class You implements Marry{
    @Override
    public void NewMarry(){
        System.out.println("我要结婚了,超开心!");
    }
}
//3.婚庆公司(代理角色,帮助你结婚)
class WeddingCompany implements Marry{
    private Marry target;

    public WeddingCompany(Marry target){
        this.target = target;
    }
    @Override
    public void NewMarry(){
        //结婚之前
        after();
        this.target.NewMarry();
        //结婚之后
        before();
    }
    public void after(){
        System.out.println("结婚之前,布置新婚现场!");
    }
    public void before(){
        System.out.println("结婚之后,收尾款!");
    }
}
运行结果:
我爱你!
结婚之前,布置新婚现场!
我要结婚了,超开心!
结婚之后,收尾款!

静态代理总结:

  • 真实对象要和代理对象实现同一个接口
  • 代理对象要代理真是角色

好处:

  • 代理对象可以做很多真实对象做不了的事情
  • 真实对象专注做自己的事情
posted @ 2021-09-09 16:32  小贤说  阅读(55)  评论(0)    收藏  举报