软件设计 代理模式 Proxy Pattern
这些代理都有一个共同特点,就是使用的一致性和中间环节的透明性,也就是说找代理做的事情需要与找对象本身做的事情是一样的,只是中间环节隐藏了而已。
代理模式分为静态代理和动态代理
1、定义租赁操作(接口)
/**
* 租赁操作
*/
public interface Rent {
/**
* 租房
*/
void rentHouse();
}
2、定义房东(真实角色)
/**
* 房东
*/
public class Landlord implements Rent{
public void rentHouse() {
System.out.println("房东出租房子");
}
}
3、定义中介(代理角色)
/**
* 中介
*/
public class Intermediary implements Rent{
/**
* 房东
*/
private Landlord landlord;
public Intermediary() {
}
public Intermediary(Landlord landlord) {
this.landlord = landlord;
}
public void rentHouse() {
// 看房
seeHouse();
// 签合同
contract();
// 租房
landlord.rentHouse();
// 收取费用
toll();
}
/**
* 看房
*/
public void seeHouse() {
System.out.println("中介带你看房");
}
/**
* 签合同
*/
public void contract() {
System.out.println("签租赁合同");
}
/**
* 收取费用
*/
public void toll() {
System.out.println("收中介费");
}
}
4、租客租房(客户)
// 房东
Landlord landlord = new Landlord();
// 中介给房东代理
Proxy proxy = new Proxy(landlord);
// 租房。不用面对房东,直接找中介租房即可
proxy.rentHouse();
在这个过程中,租客直接接触的是中介,见不到房东,但是租客依旧通过代理租到了房东的房子。
优缺点:
优点
1、可以使得真实角色更加轻松,不用再去关注一些琐碎的事情。
2、公共的业务由代理来完成,实现了业务的分工。
3、公共业务发生变化时扩展更加方便。
缺点
类变多了,多了代理类,工作量变大了,开发效率降低。
使用场景:
远程(Remote)代理
虚拟(Virtual)代理
Copy-on-Write代理

浙公网安备 33010602011771号