静态代理

静态代理

你要去做一件事,可以把这件事交给别人去做,而且别人除了做这件事还会帮你顺手做别的事。就比如结婚,结婚包括婚礼准备、结婚本身、和打扫会场,你可以把这些事交给婚庆公司去做,婚庆公司就像静态代理,除了结婚,它还会帮你准备婚礼和打扫会场。

以下代码用结婚的例子模拟静态代理:

package com.cxf.multithread.stagent;

public class TestForStaticAgent {
    public static void main(String[] args) {
        Someone cxf = new Someone();

        Agent agent = new Agent(cxf);
        agent.doMarry();
    }
}

interface Marry{
    void doMarry();
}

class Someone implements Marry{
    @Override
    public void doMarry() {
        System.out.println("get married");
    }
}

class Agent implements Marry{
    private Marry client;
    public Agent(Marry client) {
        this.client = client;
    }
    private void Prepare(){
        System.out.println("prepare for the wedding");
    }
    private void Clean(){
        System.out.println("clean the hall");
    }
    public void doMarry() {
        Prepare();
        this.client.doMarry();
        Clean();
    }
}

输出结果:

prepare for the wedding
get married
clean the hall

这段代码核心在于,agent执行doMarry时,会执行someone的doMarry和其他事情。agent和someone共同的父接口都有doMarry方法,两者分别重写了它。

Runnable接口也是这个道理。Thread和要做的事情类都继承了Runnable接口,Thread作为代理,执行start时,会执行要做的事情类的run方法和其他事情。

posted on 2021-10-18 17:06  菜小疯  阅读(26)  评论(0编辑  收藏  举报