什么是代理?
简单来说:代理(我帮你做一些事情)
例子
我结婚,我是一个真实的对象,婚庆公司帮我拍摄布置等,帮我代理(代理我),我和婚庆公司都去实现结婚接口即可,我只需要做我的是,其他事情婚庆公司(代理)帮我做即可
package com.wyh.thread; /** * @program: Thread * @description: 静态代理 * @author: 魏一鹤 * @createDate: 2021-12-29 21:48 **/ //静态代理模式总结 //1 真实对象和代理对象都要实现同一个接口 //2 代理对象要代理真实的角色 //好处 // 1 代理对象可以做很多真实对象做不了的事情 // 2 真实对象只需要专注做自己的事情,其他的事情交给代理对象 public class StaticProxy { public static void main(String[] args){ //传统写法 //You you = new You(); //you.happyMarry(); //创建代理对象 需要一个真实的对象参数 // WeddingCompany weddingCompany=new WeddingCompany(new You()); //代理对象去调用结婚方法 还可以进行其他的操作 // weddingCompany.happyMarry(); //开启多线程 new Thread(()-> System.out.println("我爱你")).start(); //简化代码 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() { //结婚之前的方法 before(); //这就是调用真实对象了 this.target.happyMarry(); //结婚之后的方法 after(); } private void after() { System.out.println("结婚之后"); } private void before() { System.out.println("结婚之前"); } }
静态代理的特点
1 真实对象和代理对象都要实现同一个接口
2 代理对象要代理真实的角色
静态代理的好处
1 代理对象可以做很多真实对象做不了的事情
2 真实对象只需要专注做自己的事情,其他的事情交给代理对象