特点:
两个子类共同实现一个接口,其中一个子类负责真实的业务实现,另外一个子类完成辅助真实业务主题的操作。
interface ISubject {
public void buyLipstick();// 核心功能是买口红
}
class RelSubject implements ISubject {//真实类,也就是客户
public void buyLipstick() {
System.out.println("买一支MAC口红");
}
}
class ProxySubject implements ISubject {//辅助类,也就是代理类
private ISubject subject;
/**
* 这里为什么返回类型是ISubject?
* 代理要为许多用户买口红,而不是某一个用户,所以此处不能为RelSubject
*/
public ProxySubject(ISubject subject) {
this.subject = subject;
}
public void brforeBuyLipstick() {
System.out.println("取钱,排队");
}
public void afterBuyLipstick() {
System.out.println("邮寄,收钱");
}
public void buyLipstick() {
this.brforeBuyLipstick();
this.subject.buyLipstick();
this.afterBuyLipstick();
}
}
public class Test {
public static void main(String[] args) {
ISubject isubject = new RelSubject();
isubject.buyLipstick();
}
}
本质:所有真实业务操作都会有一个与之辅助的工具类(功能类)共同完成。