一、角色分析
举个例子:客户要租房,房东要出租,中介中间商赚差价。
抽象角色:使用抽象类或者接口。提供出租房子
真实角色:房东,提供出租房子
代理角色:中介,可以提供租房子,看房子,签订租赁合同,收中介费。
客户:求租房子。
二、代码
- 接口
public interface Rent {
public void rent();
}
- 真实角色
public class Host implements Rent{
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
- 代理角色
public class Proxy implements Rent{
private Host host;
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
@Override
public void rent() {
seeHouse();
host.rent();
hetong();
fare();
}
//看房
public void seeHouse(){
System.out.println("中介带你看房");
}
//签租赁合同
public void hetong(){
System.out.println("签租赁合同");
}
//收中介费
public void fare(){
System.out.println("收中介费");
}
}
- 客户访问代理角色
public class Clinet {
public static void main(String[] args) {
//房东要租房子
Host host = new Host();
//代理,帮房东租房子,但是代理角色会有附属操作
Proxy proxy = new Proxy(host);
//不用找房东,直接找中介即可
proxy.rent();
}
}
三、代理模式的优缺点
优点
- 使真实角色的操作更加纯粹,不用关注一些公共的业务;
- 公共业务交给代理角色,实现业务的分工。
- 公共业务发生扩展时,方便集中管理。
缺点
一个真实角色就生成一个代理角色,代码量翻倍,开发效率降低。