代理设计模式:两个字类共同实现一个接口,其中一个子类负责真实业务的实现,另外一个子类完成辅助真实业务主题的操作。
场景假设,我们在买手机的时候,仅仅完成的是一个买手机的过程,而在买手机的前后过程还包括制造手机,手机的售后服务等,这些都是隐含在买手机中的,生产手机、手机售后保障都是交由其它的来负责。
//业务为买手机
interface ISubject {
void buyPhone();
}
//真实业务
class RealSubject implements ISubject {
public void buyPhone() {
System.out.println("买一部华为手机");
}
}
//辅助业务
class ProxySubject implements ISubject {
//真实的业务
private ISubject subject;
//通过构造函数去取得RealSubject的实例化对象
public ProxySubject(ISubject subject) {
this.subject = subject; //此时this.subject = RealSubject的哈希值
}
public void producePhone() {
System.out.println("1.生产华为手机");
}
public void afterSale() {
System.out.println("3.华为售后团队");
}
public void buyPhone() {
this.producePhone();
this.subject.buyPhone();
this.afterSale();
}
}
class Factory {
public static ISubject getInstance() {
return new ProxySubject(new RealSubject());
}
}
public class Test {
public static void main(String[] args) {
ISubject subject = Factory.getInstance();
subject.buyPhone();
}
}
运行结果: