描述
给一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
使用场景
就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
实战
同学小明晚上要完成作业,可是晚上要出去玩,于是找个同学小李帮忙写作业。作为一个班的同学,小明和小李都具备完成这个作业的能力。玩好回来后看下作业完成了没。
/**
* 抽象对象角色
*/
public interface IStudent {
void doHomework();
}
将学生抽象出来,这里重点突出写作业的能力。用接口和抽象类皆可
/**
* 目标对象角色
*/
public class StudentImpl implements IStudent{
@Override
public void doHomework() {
System.out.println("写作业");
}
}
具体化写作业的过程
/**
* 代理目标角色
*/
public class StudentProxy implements IStudent{
private StudentImpl studentImpl;
public StudentProxy() {
studentImpl = new StudentImpl();
}
@Override
public void doHomework() {
System.out.println("找人帮忙写作业");
studentImpl.doHomework();
System.out.println("验收作业");
}
}
找小李帮忙写,相比自己写多了找人和验收作业的过程,但是写作业的过程由小李完成
public class MainTest {
public static void main(String[] args) {
IStudent student = new StudentProxy();
student.doHomework();
}
}
试试这次代写过程是否顺利?