Java多线程:静态代理

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

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

静态代理

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

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

缺点:

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

示例:

package Multithreading.proxy.staticProxy;

public class StaticProxy {
    
    
    public static void main(String[] args) {
    
    
//        普通调用
        new You().happyMarry();

        System.out.println("--------------------");
//        代理模式 加了一个婚庆公司(代理)
        WeddingCompany weddingCompany = new WeddingCompany(new You());
        weddingCompany.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() {
    
    
        this.target.happyMarry();
    }
}

在这里插入图片描述
我们来对比这两行代码

        new Thread(() -> System.out.println("Hello World.")).start();
        new WeddingCompany(new You()).happyMarry();

我们来看Thread类源码:
在这里插入图片描述
发现Thread类实现了 Runnable 接口。

在这里插入图片描述
这里发现WeddingCompany实现了Marry接口。

所以不难发现Thread的原理也是实现了代理。