7.1、Java多线程——静态代理模式

7.1、Java多线程——静态代理模式

什么是静态代理?

先说说我的理解,静态代理分为四个部分

        真实角色、真实角色要做的事情、代理角色、以及最终做了什么

        举个简单的例子,假设 我现在要结婚了 这件事情中 我就是真实角色,要做的事情就是结婚。而婚庆公司就是代理角色,他需要在我结婚之前在婚礼现场做一些布置,在结婚之后要问我结尾款,那么最终做了三件事分别是 布置现场、结婚、问我结尾款。

        那我们现在用代码来实现一下静态代理,代码如下所示:

package com.hkl.demo02;

public class StaticProxy {
    public static void main(String[] args) {
        WeddingProxy weddingProxy = new WeddingProxy(new You());
        weddingProxy.HappyMarry(); 
        //也可以一句话完成如下
        new WeddingProxy(new You()).HappyMarry();
    }
}

interface Marry {
    //结婚
    void HappyMarry();
}

//真实角色
class You implements Marry {
    //要去结婚了
    public void HappyMarry() {
        System.out.println("结婚的日子到了!!!");
    }
}

//婚庆公司代理 布置结婚现场
class WeddingProxy implements Marry {

    private Marry target;

    public WeddingProxy(Marry target) {
        this.target = target;
    }

    //婚庆公司代理
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void before() {
        System.out.println("结婚之前布置现场");
    }

    private void after() {
        System.out.println("结婚之后收尾款");
    }

}

        在代码中可以看到,真实角色 和 代理角色 都必须要继承 Marry 这个接口,代理角色要代理真实角色 在真实角色要做的事情的前后 代理角色可以去完成额外要做的其他的事情。

        这样的好处就是代理角色可以做很多真实角色做不了的事情,而真实角色只需要专注做好自己的事情即可

其实我们可以对比一下 静态代理模式 和 多线程Runable接口创建线程 的方式很相似,来看看代码如下:

//先来看看Thread 的方式如下:
new Thread(传入自定义线程对象).start();

//再来对一下咱们静态代理模式如下:
new WeddingProxy(new You()).HappyMarry();

        不难看出 线程的创建 底层原理其实就是静态代理,都是先new一个代理类然后将真实角色对象传入代理类对象中,再调用其执行方法。真实角色就专注做好自己的事情,其他的交给代理类去处理就好

        我理解的就是:我们自定义的线程类专注做好run方法里定义的事情,然后其他的东西交给 Thread 代理类去处理就好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值