为其他对象提供一种代理以控制对这个对象的访问。
作用主要是解决在直接访问对象时带来的问题,比如说:房东租房时,房东只想租房,没时间带你去看房,谈价钱,这时房东直接找到中介,目的是租房子,看房子这些麻烦直接就由中介去代办;中介就相当于代理,同时可以产生一些附属功能,比如收取中介费,spring的aop底层就是代理模式;
模式的结构 1、抽象角色一般会使用接口或抽象类来解决;以租房子为例子,房东和中介主要是为了租房子,所以把租房子写成一个接口
public interface Rents {
void rent();
}
2、真实角色
被代理的角色;这里就相当于房东,主要是为了租房子,所以实现接口。
public class RentImpl implements Rents{
@Override
public void rent() {
System.out.println("租房");
}
}
3、代理角色
代理真实的角色,代理真实角色后会进行一些附属操作;这里的就相当于中介,同时会收取中介费
public class ProxxyZ implements Rents {
private Rents rents;
public ProxxyZ(Rents rents) {
this.rents = rents;
}
@Override
public void rent() {
System.out.println("收取一些费用");
rents.rent();
}
}
4、访客
也就是想租房子的人,这里是测试类
public class Tes {
public static void main(String[] args) {
RentImpl rents=new RentImpl();
ProxxyZ proxxyZ=new ProxxyZ(rents);
proxxyZ.rent();
}
}
结果:
1、职责清晰。 2、高扩展性。 3、智能化。
缺点一个真实角色就会产生一个代理角色,开发效率低



