代理角色分类:
代理模式:即代理角色(如生活中的中介)对真实角色(如生活中的房主)需求的一种代劳,代理角色帮忙完成真实角色的基本操作,并可完成额外的工作(即代理类对被代理类的功能性增强)

应用场景:
在不改变原有业务代码的前提下增加一些额外的通用功能
抽象角色:
/**
* 抽象角色-租房
* @author lmy
*/
public interface Send {
/**
* 租房动作
*/
void rent();
}
真实角色:
/**
* 真实角色(被代理角色):房主
* @author lmy
*/
public class Homeowner implements Send {
public void rent() {
System.out.println("房主房屋出租");
}
}
代理角色:
/**
* 代理角色:中介
* @author lmy
*/
public class Proxy implements Send {
private Homeowner homeowner;
public void setHomeowner(Homeowner homeowner) {
this.homeowner = homeowner;
}
public void rent() {
// 对被代理角色的功能性增强
seeHouse();
// 聚合被代理角色本来的功能
homeowner.rent();
signContract();
}
public void seeHouse(){
System.out.println("中介带客户看房");
}
public void signContract() {
System.out.println("中介帮忙签订三方合同");
}
}
客户角色:
/**
* 客户类角色
* @author lmy
*/
public class Client {
public static void main(String[] args) {
// 房主出租
Homeowner homeowner = new Homeowner();
// 中介代理房主
Proxy proxy = new Proxy();
proxy.setHomeowner(homeowner);
// 客户找中介代理租房
proxy.rent();
}
}
静态代理的优点:
静态代理的缺点:
一个代理类只能代理一种类型的对象,如果要服务多类型的对象。就要为每一种对象都准备一个代理类,静态代理在程序规模稍大时就会出现大量重复代码,降低开发效率。
所以动态代理就出现了!