代理模式之静态代理

代理模式我们可以从字面上去理解它的涵义,代理就是代替某个事物去处理事情,代理在代替处理事情的时候可能还会添加一些它的补充行为。以生活中申请留学的代理机构为例,代理机构代替你去申请国外高校,除了“申请高校”这件事外,它还在申请之前帮你“查询高校信息”,并在申请成功之后想你“要代理费”。接下来我就以申请留学为例简单实现一个静态代理的例子。

三个对象

  • 要代理的事情(一般是一个接口):申请留学这件事(StudyAbroad)

  • 被代理的人:学生(Student)

  • 代理人:留学申请机构(StudyAbroadAgent)

他们的关系:留学申请机构代理学生去申请留学

实现

StudyAbroad.java

要代理的事:申请留学,就是一个接口

/**
 * 要代理的事情:申请留学这件事
 */
public interface StudyAbroad {
    void applyForStudyAbroad();
}

Student.java

学生要出国留学,也是真正要做代理的事的对象,他实现申请留学这件事的接口

/**
 * 学生
 */
public class Student implements StudyAbroad{
    private String name;

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

    @Override
    public void applyForStudyAbroad() {
        System.out.println(this.name + "申请留学成功!");
    }
}

StudyAbroadAgent.java

代理机构同样也实现申请留学这件事的接口,但他在实现时调用了被代理人的申请留学方法,也就是被代理人申请留学。并且在代理申请留学之前还帮助学生查询了高校信息,替学生省事了,但是代理完后要交钱😂

/**
 * 代理人:留学申请机构
 */
public class StudyAbroadAgent implements StudyAbroad{

    // 被代理的人
    private StudyAbroad studyAbroad;

    public StudyAbroadAgent(StudyAbroad studyAbroad){
        this.studyAbroad = studyAbroad;
    }

    @Override
    public void applyForStudyAbroad() {
        before();
        studyAbroad.applyForStudyAbroad();  // 替被代理的人完成要代理的事
        after();
    }

    // 申请之前帮你查询国外高校信息
    public void before(){
        System.out.println("查询国外高校信息。");
    }

    // 申请之后向你要代理费
    public void after(){
        System.out.println("收取代理费。");
    }
}

Main.java

主函数,请代理机构帮某个学生(MakerHu)申请留学。

public class Main {
    public static void main(String[] args) {
        Student student = new Student("MakerHu");
        StudyAbroadAgent studyAbroadAgent = new StudyAbroadAgent(student);
        studyAbroadAgent.applyForStudyAbroad();
    }
}

运行结果

查询国外高校信息。
MakerHu申请留学成功!
收取代理费。

静态代理模式有啥用呢?

在java的多线程中就用到了静态代理模式。

我们在实现多线程时,首先写一个自己的类MyRunnabale实现Runnable,接着通过new Thread(new MyRunnable).start();开启线程。

在Java中Thread实现了Runnable接口,因此在代理模式中,他们的扮演的身份分别是:

  • 要代理的事情:Runnable中的run()方法

  • 被代理的类:你实现的类MyRunnable

  • 代理类:Thread

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容