java基础-多线程(2

76 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天

静态代理

Snipaste_2022-10-02_00-03-03.png

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。

简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。

代理模式角色:

  • 抽象角色(Subject):通过接口或抽象类声明真实主题和代理对象实现的业务方法。
  • 真实角色(Real Subject):实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
  • 代理(Proxy):提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
  • 客户 : 使用代理角色来进行一些操作 。

我们今天聊聊静态代理

静态代理这种代理方式需要代理对象和目标对象实现一样的接口。

优点:可以在不修改目标对象的前提下扩展目标对象的功能。

缺点:

  1. 冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
  2. 不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。

举例 结婚案例

实现: 结婚案例

 /**
  * 静态代理:结婚案例
  */
 public class Demo7_StaticProxy {
     public static void main(String[] args) {
         WeddingCompany weddingCompany = new WeddingCompany(new You());
         weddingCompany.happyMarry();
     }
 }
 ​
 //结婚
 interface Marry {
     void happyMarry();
 }
 ​
 //真实角色:你去结婚
 class You implements Marry {
     @Override
     public void happyMarry() {
         System.out.println("doris要结婚了,超开心");
     }
 }
 ​
 //代理角色:帮助你结婚
 class WeddingCompany implements Marry {
     private Marry target;//代理-->真实目标角色角色,帮谁结婚
 ​
     public WeddingCompany(Marry target) {
         this.target = target;
     }
 ​
     @Override
     public void happyMarry() {
         after();
         this.target.happyMarry();
         before();
     }
 ​
     private void after() {
         System.out.println("结婚之前,布置现场");
     }
 ​
     private void before() {
         System.out.println("结婚之后,收尾款");
     }
 }
 ​

优化:使用线程,Lamda表达式


静态代理好处

代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事


总结

真实对象和代理对象都要实现一个接口 代理对象要代理真实角色