3、静态代理与Thread

静态代理模式:真实对象和代理对象都实现同一个接口,代理对象可以帮助做更多的事情,真实对象更加专注

用婚庆公司举例:你自己要结婚。婚庆公司可以帮你布置,你只需要负责结婚就行。
你是真实对象,婚庆公司是代理对象,你们两个都实现Marry接口,接口内有一个happyMarry的方法。婚庆公司的构造器将你作为参数,在婚庆公司的happyMarry方法中,可以去调用你的happyMarry方法。

import javax.swing.*;
//main
public class StaticProxy {
    public static void main(String[] args) {
       new marryCompany(new You("yqb")).happyMarry();

    }
}
//结婚接口
interface Marry{
    void happyMarry();
}
//你,真实对象,实现Marry
class You implements Marry{
    private String name;

    public You(String name) {
        this.name = name;
    }

    @Override
    public void happyMarry() {
        System.out.println(name+ "要结婚了");
    }
}
//婚庆公司,代理对象,实现Marry,且接收Marry对象
class marryCompany implements Marry{
    private Marry XXX;

    public marryCompany(Marry XXX) {
        this.XXX = XXX;
    }

    @Override
    public void happyMarry() {
        before();
        XXX.happyMarry();
        after();
    }
	//婚前
    private void after() {
        System.out.println("代理:结婚后,公司收钱");
    }
	//婚后
    private void before() {
        System.out.println("代理:结婚前,公司布置");
    }
}

与Thread极其相似,下面是Thread覆写run方法源码,target是Runnable对象。我们构造Thread时传入Runnable对象就会传给它。可以看到当我们调用thread的start()方法时,就会去执行run()方法,而这个方法内部又是去调用传入的Runnable对象的run()方法,与婚庆公司代理的理念一模一样。

public void run() {
    if (target != null) {
        target.run();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值