静态代理
代理(我帮你做一些事情),有静态代理就有动态代理,今天学习静态代理,动态代理以后再学习
例子 我结婚,我是一个真实的对象,婚庆公司帮我拍摄布置等,帮我代理(代理我),我和婚庆公司都去实现结婚接口即可,我只需要做我的是,其他事情婚庆公司(代理)帮我做即可
1、什么是静态代理?
两个对象之间的操作不直接进行,通过第三方进行代理来实现。就比如说房客租房子这件事情,租房的两个对象是房客和房东,静态代理便是,在房客和房东之间多了一个角色,这便是中介,代理便是中介,现在租房这件事情便是房客和中介,以及中介和房东之间的事情,房客不直接和房东进行租房的操作。
2、为什么要使用静态代理?
回到刚才租房的例子,如果不使用静态代理,后面房客的需求增加了,房东的功能也随之增加,在原有代码的基础上进行代码的改动,可能会导致代码出现问题。
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("结婚之前"); } }