代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用。
代理,指的就是一个角色代表另一个角色采取行动,就像生活中,一个红酒厂商不会直接把红酒零售给客户的,都是通过代理来完成他的销售业务的。而客户也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了。具体红酒工厂在哪里,客户不用关心,代理会帮他处理。
这里产生了四个对象:客户、代理商、红酒厂商、代理商-红酒厂商(关系)。
代理模式作用:为其他对象(红酒厂商)提供一种代理(代理商)以控制对这个对象(红酒厂商)的访问。
代理对象可以在客户端(客户)和目标对象(红酒厂商)之间起到中介作用。
abstract class Subject{ //代理请求
abstract public void request();
}
class RealSubject extends Subject{
@Override
public void request() { //真是角色(红酒厂商)
System.out.println("我是红酒厂商,欢迎品尝购买。");
}
}
class ProxySubject extends Subject{
private RealSubject realSubject;
@Override
public void request() { //该方法封装了真实对象的request方法
preRequest();
if(realSubject==null) {
realSubject=new RealSubject();
}
realSubject.request();
postRequest();
}
private void postRequest() {
System.out.println("付款购买。");
}
private void preRequest() {
System.out.println("广告宣传,免费品尝。");
}
}
public class Proxytest {
public static void main(String[] args) {
Subject sub=new ProxySubject();
sub.request();
}
}
代理设计模式的核心组成:一个接口有两个子类,一个子类负责真实的业务操作功能,另外一个负责完成与真实业务有关的操作。