代理模式:代理模式其实就是给一个对象提供一个代理对象,并由代理对象替换原对象的访问。在生活中,就是我们俗称的中介

    优点:
    可以在无法直接引用原对象时,用代理对象替换原对象的引用。
    便于在原对象的基础上拓展、增加功能。

    实现:
    以我们最熟悉的租房为例。首先我们需要有一个租房服务,有房东和中介,租户并不认识房东,从中介处租房。

    1、租房接口

    1. /**
    2. * 租房接口
    3. */
    4. public interface RentingHouse {
    5. /**
    6. * 房屋出租
    7. */
    8. void houseLease();
    9. }

    2、房东

    1. /**
    2. * 房东
    3. */
    4. public class HouseOwner implements RentingHouse {
    5. /**
    6. * 房屋出租
    7. */
    8. public void houseLease(){
    9. System.out.println("出租房屋");
    10. }
    11. }

    3、中介(代理类)

    1. /**
    2. * 中介(代理)
    3. */
    4. public class HouseOwnerProxy implements RentingHouse {
    5. HouseOwner houseOwner;
    6. /**
    7. * 房屋出租
    8. */
    9. public void houseLease(){
    10. if (houseOwner == null){
    11. houseOwner = new HouseOwner();
    12. }
    13. houseOwner.houseLease();
    14. }
    15. }

    4、测试

    1. /**
    2. * 测试代理类
    3. */
    4. public class TestProxy {
    5. public static void main(String [] args){
    6. HouseOwnerProxy proxy = new HouseOwnerProxy();
    7. proxy.houseLease();
    8. }
    9. }

    测试结果:
    image.png

    代理模式主要运用在这些地方:
    1、远程代理:也就是为一个对象在不同的地址空间提供局域代表,这样可以隐藏一个对象存在与不同地址空间的事实
    2、虚拟代理:是根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的对象。譬如我们网上打开图片之前,会有一个图片框,未打开的图片框其实是用虚拟代理代替真实的图片,此时代理存储的是真实图片的地址尺寸等信息。
    3、安全代理:用来控制真实对象的访问权限。
    4、智能指引:当调用真实对象是,代理用于处理一些其他事情(拓展、增加功能)。