Java设计模式六:代理模式

Java设计模式六:代理模式

其实,在之前学习SpringAOP的时候,就有一篇博文专门讲解了静态代理和动态代理:代理技术详解,这篇博文中,以事务为操作为例,讲述了代理的要素和实现方法,本篇博文将用生活中的例子,以更简单的方式实现代理技术。

代理在生活中很常见,例如代购:女生想要买化妆品,但是没有旗舰店且所在地区没有专柜,那么此时就需要找代购带货,我们通过代购得到想要的东西;再例如租房中介:房东不容易找到租客,租客也很难找到合适的房东,此时就可以通过中介来解决这个事情。
以房屋出租为例:
Java设计模式六:代理模式_第1张图片
使用代理模式后,租客将直接找中介租房,不需要再见到房东了,但是中介同时也会有一些额外的操作,如带人看房,收取中介费等,中介和房东的目的都是想要把房子租出去,因此需要实现同一个接口,即为抽象接口,抽象角色;房东是真实角色,而代理角色取代了真实角色,并会有一些附属操作,最后,客户是访问代理对象的人。

抽象角色:

public interface Rent {
    void rent();
}

真实角色:房东

public class Host implements Rent {
    @Override
    public void rent() {
        System.out.println("房东要出租房");
    }
}

代理角色:中介

public class Proxy implements Rent {
    private Host host;

    public Proxy() {
        host = new Host();
    }

    @Override
    public void rent() {
        host.rent();
        seeHose();
        contract();
        getFee();
    }

    public void seeHose() {
        System.out.println("看房");
    }

    public void contract() {
        System.out.println("签合同");
    }

    public void getFee() {
        System.out.println("收取中介费");
    }
}

客户:实际租房的人

public class Client {
    public static void main(String[] args) {
        //如果通过房东直租,但实际上,我们找不到这个类
        new Host().rent();
        System.out.println("----------------------");
        
        //通过中介租房,隐藏房东的存在
        new Proxy().rent();
    }
}

测试结果:
Java设计模式六:代理模式_第2张图片
看起来,大概也许似乎好像更麻烦了???明明我找房东两段代码就解决了
但是,事实上你很难找到房东,并且房东也不愿意做这些麻烦事,看房签合同的事情这种高重复性的事情交给中介就可以了,用户也可以省去时间和精力直接找中介解决,且真正的业务代码不会这么简单,此时,代理的作用就显而易见了。

代理模式的好处主要是:

  1. 使真实角色的操作更加纯粹,不需要关注一些公共业务
  2. 公共业务交给代理角色,实现了业务的分工
  3. 公共业务需要扩展时,方便集中管理

另一篇文章关于代理技术的文章,推荐给大家看:
https://blog.csdn.net/szy2333/article/details/89338412

你可能感兴趣的:(设计模式,java,设计模式)