代理模式:代理模式其实就是给一个对象提供一个代理对象,并由代理对象替换原对象的访问。在生活中,就是我们俗称的中介
优点:
可以在无法直接引用原对象时,用代理对象替换原对象的引用。
便于在原对象的基础上拓展、增加功能。
实现:
以我们最熟悉的租房为例。首先我们需要有一个租房服务,有房东和中介,租户并不认识房东,从中介处租房。
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、智能指引:当调用真实对象是,代理用于处理一些其他事情(拓展、增加功能)。
