栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

结构型模式之代理模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

结构型模式之代理模式

代理模式 什么是代理模式?

为其他对象提供一种代理以控制对对象的访问。又叫委托模式。
代理模式把代理对象插入到访问者和目标对象之间,从而为访问者对目标对象的访问引入一定的间接性。正是这种间接性,给了代理对象很多操作空间,比如在调用目标对象前和调用后进行一些预操作和后操作,从而实现新的功能或者扩展目标的功能。
生活中的例子:翻译,中介,律师等扮演的都是代理的角色。

动机

在某些情况下,客户不想或不能直接引用某个对象,这个时候就需要一个中介(中间人)帮忙完成间接引用,该中介被称为 ”代理对象“。

结构

场景
  1. 拦截器
  2. AOP:动态代理,CGLIB以及JDK
  3. 缓存代理,备忘模式就是使用缓存代理的思想,将复杂计算的结果缓存起来,下次传参一致时直接返回之前缓存的计算结果
  4. 保护代理:比如对某一对象进行访问时,可以设置保护代理,对请求进行过滤,起到保护作用。
优缺点

优点

  1. 代理对象在访问者与目标对象之间可以起到中介和保护目标对象的作用;
  2. 代理对象可以扩展目标对象的功能;
  3. 代理模式能将访问者与目标对象分离,在一定程度上降低了系统的耦合度,如果我们希望适度扩展目标对象的一些功能,通过修改代理对象就可以了,符合开闭原则;

缺点
增加了一层实际上增加了系统的复杂度,因此要考虑系统是否真正需要代理。

实现
// 主要实现一些公共的方法
package com.wlj.proxy;


public interface IService {
    void send();
}
// 真实对象
package com.wlj.proxy;


public class Target implements IService{
    public Target() {
    }
    @Override
    public void send() {
        System.out.println("目标对象发送了消息");
    }
}
// 代理对象
package com.wlj.proxy;


public class Proxy implements IService{
    // 实际对象
    private Target target;

    public Proxy(Target target) {
        this.target = target;
    }

    @Override
    public void send() {
        System.out.println("代理调用目标对象方法前");
        this.target.send();
        System.out.println("代理调用目标对象方法后");
    }
}

// 客户端
package com.wlj.proxy;


public class Client {
    public static void main(String[] args) {
        Target target = new Target();
        Proxy proxy = new Proxy(target);
        proxy.send();
    }
}

// 结果
代理调用目标对象方法前
目标对象发送了消息
代理调用目标对象方法后

总结:代理对象可以基于目标对象进行一些新的扩展而无需改动真实对象的代码。比如中介租房子给客人,中介收的中介费就是如此,实际上房子还是房东租给你的,但是中介负责将你们联系起来了。

面试题:适配器模式,代理模式,装饰者模式的不同?

1、装饰者模式的关注点在于添加功能。
2、代理模式的关注点在于控制对象的访问,其原型对象对于用户无法得知。
3、适配器模式关注点在于适配。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号