package com.example.demo;

/**
 * @Description 接口的应用:代理模式
 *  静态代理:每个接口对应一个代理类,静态的去代理每个接口的实现类
 *  动态代理:不同的接口对应同一个代理类,动态的去代理不同接口的实现类
 *           (动态的创建代理类对象)
 * @Auther guofeng.xie
 * @Date 2020/10/11 20:14
 */
public class TestProxy {
    public static void main(String[] args) {
        //创建代理类对象
        ProxyExample proxyExample = new ProxyExample();
        //调用代理类的方法,实际执行的是被代理类的方法
        proxyExample.action();
    }
}

interface Example{
    void action();
}

//代理类
class ProxyExample implements Example{
    Example exa;

    public ProxyExample() {
        System.out.println("代理类创建成功~~");
        exa = new ExampleImpl();
    }

    @Override
    public void action() {
        System.out.println("代理类开始执行~~");
        exa.action();
        System.out.println("代理类执行结束~~");

    }
}

//被代理类
class ExampleImpl implements Example{
    @Override
    public void action() {
        System.out.println("被代理类开始执行~~");
        System.out.println("具体的操作~~");
        System.out.println("被代理类执行完毕~~");
    }
}