代理模式的特点:
两个子类共同实现一个接口。其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作。
如:
接口:买一套圣诞限量版Mac口红
真实主题类:你
代理类:代购
代理模式举例:
interface ISubject{
public void buyComputer();//核心功能:买电脑
}
//真实主题类
class RealSubject implements ISubject{
public void buyComputer(){
System.out.println("2.买一台外星人电脑");
}
}
//真正的操作业务
class ProxySubject implements ISubject{
private ISubject subject;
//构造方法
public ProxySubject(ISubject subject){
this.subject=subject;
}
public void produceComputer(){
System.out.println("1.生产外星人电脑");
}
public void afterSale(){
System.out.println("3.外星人电脑售后团队");
}
public void buyComputer(){
this.produceComputer();//真实操作前的准备
this.subject.buyComputer();//调用真实业务
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.buyComputer();
}
}
运行结果:
1.生产外星人电脑
2.买一台外星人电脑
3.外星人电脑售后团队
代码分析:
首先设计一个接口ISubject。子类RealSubject_负责真实业务,即实现买电脑的功能。子类ProxySubject辅助真实业务的实现,即实现生产电脑和售后服务的功能。
代理模式的本质:
所有的真实业务操作都会有一个与之辅助的工具类(功能类)共同完成。
代理模式在JavaEE中有广泛应用,如:EJB、WebService等技术