代理模式:代理模式其实就是给一个对象提供一个代理对象,并由代理对象替换原对象的访问。在生活中,就是我们俗称的中介
优点:
可以在无法直接引用原对象时,用代理对象替换原对象的引用。
便于在原对象的基础上拓展、增加功能。
实现:
以我们最熟悉的租房为例。首先我们需要有一个租房服务,有房东和中介,租户并不认识房东,从中介处租房。
1、租房接口
/**
* 租房接口
*/
public interface RentingHouse {
/**
* 房屋出租
*/
void houseLease();
}
2、房东
/**
* 房东
*/
public class HouseOwner implements RentingHouse {
/**
* 房屋出租
*/
public void houseLease(){
System.out.println("出租房屋");
}
}
3、中介(代理类)
/**
* 中介(代理)
*/
public class HouseOwnerProxy implements RentingHouse {
HouseOwner houseOwner;
/**
* 房屋出租
*/
public void houseLease(){
if (houseOwner == null){
houseOwner = new HouseOwner();
}
houseOwner.houseLease();
}
}
4、测试
/**
* 测试代理类
*/
public class TestProxy {
public static void main(String [] args){
HouseOwnerProxy proxy = new HouseOwnerProxy();
proxy.houseLease();
}
}
测试结果:
代理模式主要运用在这些地方:
1、远程代理:也就是为一个对象在不同的地址空间提供局域代表,这样可以隐藏一个对象存在与不同地址空间的事实
2、虚拟代理:是根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的对象。譬如我们网上打开图片之前,会有一个图片框,未打开的图片框其实是用虚拟代理代替真实的图片,此时代理存储的是真实图片的地址尺寸等信息。
3、安全代理:用来控制真实对象的访问权限。
4、智能指引:当调用真实对象是,代理用于处理一些其他事情(拓展、增加功能)。