【设计模式】代理模式(静态代理)

一.代理模式综述

代理(proxy)模式,顾名思义,就是通过中间代理人去操作对象。比如我们买房子,我们会通过房中介去购买房子一样。实际是为我们的对象去寻找一个替身,我们通过替身去操纵我们的对象。

  • 被代理对象:远程对象,创建开销大的对象,需要远程控制的对象
  • 代理模式:静态代理和动态代理(动态代理也叫JDK代理或者接口代理)
如下图所示,Client通过Proxy来操纵TargetObject.

在这里插入图片描述

二.静态代理

定义: 静态代理使用的时候需要定义接口或者父类,被代理的对象(即目标对象)和代理对象需要同时继承相同父类或者相同接口。

示例:
在这里插入图片描述
租房子接口

package com.sdnu.proxypattern;

/**
 * 提供租房的接口
 *
 * @author Beyong
 * @date 2021/05/21 19:55
 */

public interface RentHouse {
    /***
     * description:
     *
     * @param
     * @return []
     */
    void renHouse();
}

租房子的实现类

package com.sdnu.proxypattern;

/**
 * @author Beyong
 * @Description person who really rent house
 * @date 2021/05/21 20:38
 */

public class ReallyRentHouse implements RentHouse{
    @Override
    public void renHouse(){
        System.out.println("rent a beautiful house");
    }
}

代理人

package com.sdnu.proxypattern;

/**
 * @author Beyong
 * @Description person who really rent house
 * @date 2021/05/21 20:38
 */

public class ReallyRentHouse implements RentHouse{
    @Override
    public void renHouse(){
        System.out.println("rent a beautiful house");
    }
}

顾客买房

package com.sdnu.proxypattern;

/**
 * @author Beyong
 * @Description client
 * @date 2021/05/21 20:40
 */

public class Test {
    public static void main(String[] args) {
        /* 第一种租房,不用通过中介,直接找房东 */
        RentHouse client = new ReallyRentHouse();
        client.renHouse();
        /* 第二中租房,通过中介 */
        IntermediaryProxy agent = new IntermediaryProxy(client);
        agent.renHouse();
    }
}

运行结果:

在这里插入图片描述

我们通过UMl图也可以看出,我们买房有两种方式,一种通过房中介,另一种则直接向房东要房子。
在这里插入图片描述
我们通过代理的方式能使得我们的程序具有更强的扩展性,以租房为例,以后我们有房子要租出去,只需找放中介即可,我们要租房子,也可以找房中介即可。

优点: 在不改变目标的情况下,通过代理对象对目标进行扩展。

缺点: :代理对象需要与代理目标具有相同父类,所以需要很多代理对象,比如我们租车,需要通过车中介,不能通过房中介一样,需要产生许多的代理对象。
一旦接口增加新的方法,代理对象和目标对象都需要改变。

作者:Beyong    
出处:Beyong博客
github地址:https://github.com/beyong2019


本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值