所谓代理设计就是指由一个代理主题来操作真实主题,真实主题执行具体业务操作,而代理主题负责其他相关的业务的处理。
eg:生活中我们使用代理上网,客户通过网络代理连接网络,由代理服务器完成用户权限和访问限制等与上网操作相关的操作。
分析:
只需要定义一个上网的接口,代理主题和真实主题都同时实现此接口,然后再由代理主题操作真实主题即可。
interface Network{ // 定义上网的接口
public void surfingOnline(); // 定义上网浏览的抽象方法
}
class Real implements Network { // 真实的上网操作
public void surfingOnline(){ // 覆写抽象方法
System.out.println("上网看空间!!!");
}
}
class Proxyer implements Network{ // 代理上网
private Network network;
public Proxyer(Network network){ // 设置代理的真实操作
this.network = network; // 设置代理的子类
}
public void check(){ // 与具体业务相关的操作
System.out.println("我帮你检查用户是否合法。");
}
public void surfingOnline(){
this.check(); // 可以同时调用多个与具体业务相关的操作
this.network.surfingOnline(); // 调用真实上网操作
}
}
public class ProxyDemo {
public static void main(String []args){
//Netwrok net = null; // 定义接口对象
Network net = new Proxyer(new Real()); //实例化代理,同时传入代理的真实操作
net.surfingOnline(); // 客户只关心上网浏览一个功能
}
}

从上面可以看出,真实主题只用完成上网最基本功能,而代理主题要做比真实主题更多的业务相关的操作。