代理模式:當客戶端無法直接訪問某個對象或者訪問困難時,使用代理模式烤镐。代理模式就是建立一個和原對象有相同功能的新對象,但是在新對象內(nèi)部可以含有比原對象多的方法。訪問代理之后的新對象哑诊,就跟訪問原對象一樣。
比如:房東出租房子及刻,房東需要跟租戶簽合同镀裤,跟租戶收傭金,出租房子〗煞梗現(xiàn)在有了中介代理人之后暑劝,租客不需要跟房東直接接觸,房東不需要直接跟租戶簽合同颗搂,收傭金担猛,出租房子,房東只需要跟中介代理人接觸,同樣毁习,租客也要跟代理人接觸智嚷,這個代理人對于租客,就像房東一樣纺且。
代碼示例:
房東和代理人有同樣的功能盏道,出租房子。這兩個角色需要繼承自同一個抽象類载碌,這個類中含有一個方法猜嘱,出租房子。
相同功能的抽象類:
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();