代理模式:当客户端无法直接访问某个对象或者访问困难时,使用代理模式。代理模式就是建立一个和原对象有相同功能的新对象,但是在新对象内部可以含有比原对象多的方法。访问代理之后的新对象,就跟访问原对象一样。
比如:房东出租房子,房东需要跟租户签合同,跟租户收佣金,出租房子。现在有了中介代理人之后,租客不需要跟房东直接接触,房东不需要直接跟租户签合同,收佣金,出租房子,房东只需要跟中介代理人接触,同样,租客也要跟代理人接触,这个代理人对于租客,就像房东一样。
代码示例:
房东和代理人有同样的功能,出租房子。这两个角色需要继承自同一个抽象类,这个类中含有一个方法,出租房子。
相同功能的抽象类:
public abstract class RentHouse {
public abstract void rentHouse();
}
房东原对象:
public class Landlord extends RentHouse{
public void rentHouse(){
System.out.println("landlord rent the house");
}
}
签订合同:
public class Contract {
public void signContract(){
System.out.println("sign contract");
}
}
收租金:
public class Rent {
public void getRent(){
System.out.println("get Rent");
}
}
代理人新对象:
public class AgencyProxy extends RentHouse {
private Landlord landlord;
private Contract contract;
private Rent rent;
public AgencyProxy(){
landlord = new Landlord();
contract = new Contract();
rent = new Rent();
}
@Override
public void rentHouse() {
contract.signContract();
landlord.rentHouse();
rent.getRent();
}
}
测试:
AgencyProxy agency = new AgencyProxy();
agency.rentHouse();