【JAVA设计者模式之-静态代理模式】

静态代理模式总结:
1、真实对象和代理对象都需要实现同一个接口
2、代理对象要代理目标真实对象
好处:
1、代理对象可以做很多真实对象做不了的事情
2、真实对象专注做自己的事情
package com.agentliu.demo02;
/**
*@className: StaticProxy
*@description: 线程的静态代理模式
*@author: jj.liu
*@create: 2021-10-14 09:46
*/
//静态代理模式总结:
        //真实对象和代理对象都需要实现同一个接口
        //代理对象要代理目标真实对象
    //好处:
        //1、代理对象可以做很多真实对象做不了的事情
        //2、真实对象专注做自己的事情
public class StaticProxy {
    public static void main(String[] args) {
        //创建婚庆公司对象,将“你”通过构造方法参数的形式传给婚庆公司,婚庆公司代理你去完成结婚这件事情。
        new WeddingCompany(new You()).HappyMarry();
        //线程的创建方式也是通过静态代理模式来实现的
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("线程实现。。。");
//            }
//        }).start();
        //通过lamda表达式简写为:
        new Thread(() ->System.out.println("线程实现。。。")).start();
    }

}

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() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void before() {
        System.out.println("婚庆公司在结婚之前,布置婚礼现场。。。");
    }

    private void after() {
        System.out.println("婚庆公司在结婚之后,打扫战场。。。。");
    }
}