在静态代理中,我们找了一个中介A来帮忙找房子。中介A提供了一系列的服务,比如筛选房源、安排看房、签约等。这个中介的流程是固定的,我们每次找中介A租房的时候,中介A都按照它们规定的流程执行。
1.类比说明:
- 我们(Renters,租房者):客户,想要租到合适的房子。
- 房东(Landlord,真实的出租者):拥有房源,真实的目标对象。
- 中介A(LandlordProxy):静态代理角色,由于我们每次都找同一家中介,这家中介在编译时就明确了自己的代理流程,不会临时调整。
2.静态代理流程:
- 我们找到固定的中介A,希望租房。
- 中介A开始按固定流程代理我们完成租房:筛选房源、安排带看、签合同等。
- 我们通过中介A租到了房子。
3.静态代理的缺点:
如果我们之后需要不同的服务,比如希望找到不收中介费的中介B,又或者找专门提供短租的中介C,那我们就得找不同的中介,并为每个中介创建单独的代理对象,增加了复杂度,不够灵活。
对上述场景用静态代理代码实现:
假设有一个房东类和一个中介代理类,静态代理需要手动创建代理类来完成租房的代理服务。
public interface Rent {
// 定义租房接口
void rentHouse();
}
/**
* 房东A(真实的出租者),实现租房接口
*/
public class LandlordA implements Rent {
@Override
public void rentHouse() {
System.out.println("房东A待出租的房子");
}
}
/**
* 中介A
*/
public class LandlordAProxy implements Rent {
// 中介有房东信息
private final LandlordA landlordA = new LandlordA();
@Override
public void rentHouse() {
System.out.println("中介带租客看房源信息");
// 调用房东的租房方法
landlordA.rentHouse();
System.out.println("中介带我们跟房东处理租赁合同");
}
}
/**
* 我们(打工人):租房者
*/
public class Renters {
public static void main(String[] args) {
System.out.println("我是租客,找到中介..");
// 创建代理
LandlordProxy agency = new LandlordProxy();
// 通过代理租房
agency.rentHouse();
}
}
输出结果:
- 我是租客,找到中介…
- 中介带租客看房源信息
- 房东A待出租的房子
- 中介带我们跟房东处理租赁合同
缺点就是我想换中介了,又得写一套静态代理逻辑,代码量大。