java代理模式(Proxy Pattern)

场景

中秋假期到了,李敏要到火车站买张回家的车票,发现去趟车站太远了,于是选择学校附近的票务中心,让票务中心的工作人员帮自己买票。

具体分析

在上面的例子中,“买票”是业务操作,票务中心帮忙买票,那么“票务中心”是代理角色,真正要买票的是李敏,所以“李敏”是具体角色。

在这个过程中,票务中心承担了代理的角色,实现了买票的业务需求,那么,在java面向对象编程中,也有一种类似的设计模式,叫代理模式。

定义

对其他对象提供一种代理以控制对这个对象的访问

类图
这里写图片描述

模式中的角色与职责

  • AbstractObject
    抽象角色。
    一个普通的业务类型定义。
interface abstractObject{
    public void operation();
}
  • RealObject
    具体角色。
    业务逻辑的具体执行者。
class RealObject implements abstractObject{
    @Override
    public void operation() {
        System.out.println("真实的操作");
    }
}
  • ProxyObject
    代理角色。
    实现了业务逻辑。
class ProxyObject implements abstractObject{
    RealObject realObject;
    @Override
    public void operation() {
        if(realObject == null){
            realObject = new RealObject();
        }
        realObject.operation();
    }
}

客户端实现

public class ProxyTest {

    public static void main(String[] args) {
        ProxyObject proxyObject = new ProxyObject();
        proxyObject.operation();
    }
}

应用形式

  • 远程代理(Remote Proxy)

    为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

  • 虚拟代理(Virtual Proxy)

    根据需要创建开销很大的对象。 通过它来存放实例化需要很长时间的真实对象。

    比如打开一个很大的HTML网页时,里面可能有很多的文字和图片,但是你可以很快打开它,此时你所看到的是所有的文字,但图片却是一张一张地下载后才能看到。那些未打开的图片框,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。

  • 安全代理

    用来控制真实对象访问时的权限。

  • 智能引用代理(Smart Reference Proxy)

    指当调用真实的对象时,代理处理另外一些事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值