代理模式指,通过代理的方式,为对象提供一种访问并控制该对象行为的方法。
在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问。
可以将代理对象理解为客户端和目标对象之间的中介者。
比如我们在买房时,通常会有这么几个过程:找房 -> 看房 -> 网签 -> 交易完成,当然真正的过程比这要复杂得多,所以通常会找房产经纪人(中介),这个房产经纪人就是代理,这样我们不需要自己去找房子以及考虑房子后续的签约过程,我们只需要把需求(想要什么样的房子)告诉代理人即可,然后房产交易的事情也不用我们自己去银行跑,完全由代理帮助我们进行完成。
定义 Buyer 接口:
public interface Buyer {
void buyHouse(String type);
}
定义 BuyerImpl 实现类:
public class BuyerImpl implements Buyer {
@Override
public void buyHouse(String type){
System.out.println("I need a house, type is:" + type);
}
}
定义代理类 Proxy:
public class Proxy implements Buyer {
private BuyerImpl buyer;
public Proxy(){
this.buyer = new BuyerImpl();
}
@Override
public void buyHouse(String type){
buyer.buyHouse(type);
Integer house = findHouse(type);
System.out.println("find a house by proxy, house ID is:" + house);
netSign();
}
// 找房子
private Integer findHouse(String type){
Map<String, Integer> houseList = new HashMap<String, Integer>(){
// 分别为房子类型和房子的ID
{
put("小区住房", 5013);
put("别墅", 1010);
put("四合院", 8373);
}
};
return houseList.get(type);
}
// 网签
private void netSign(){
System.out.println("网签");
System.out.println("交易完成");
}
}
测试:
public class testDemo {
public static void main(String[] args) {
Buyer buyer = new Proxy();
buyer.buyHouse("四合院");
}
}