设计模式之代理模式:本地接口代理远程接口的调用

场景

场景1:

(1)买火车票不一定在火车站买,也可以去代售点。

(2)我们在本地(当地)不能去远程(火车站)去买火车票。

场景2:

(1)电商系统中支付中心中支付接口;物流中心的物流厂商接口,开发这些远程接口的代理类,代理类代理远程接口访问。

内容

1.代理模式

  1. 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
1.1 类图
  1. 代理类和被代理类都是同一类型对象,所以实现同一个接口。
  2. 代理类由于需要代码被代理的类,所以我们需要在代理类里面依赖被代理类。
1.2 代码
复制代码
public class ProxyPattern2 {
    public static void main(String[] args) {
        /**
         * 代理模式一般有3个类:
         * 主体、主体实现类、代理类;代理类和实体主体实现相同接口 类似于现实中 我们找人做代理需要找到合适的人
         * 我们需要调用实体类的sell请求,但是我们自己不去调用,而是使用实体类的代理类去调用
         */
       //1.创建被代理人
        TrainSeller trainSeller = new TrainSeller();

        //2.创建代理人
        Proxy proxy = new Proxy(trainSeller);
        proxy.sell();
    }

    public interface Seller{
        void sell();
    }

    public static class  TrainSeller implements Seller{
        public void sell() {
            System.out.println("出售火车票");
        }
    }

    public static class Proxy implements Seller{
        /**
         * 代理类代理主体,肯定需要拿到主体
         * 我们可以对代理类代理主体之前做一些额外事情
         */
        private Seller seller;
        public Proxy(Seller seller){
            this.seller = seller;
        }
        public void sell() {
            System.out.println("执行额外的条件判断,判断是否要调用Seller的sell()方法");
            boolean result = true;
            if(result){
                seller.sell();
            }
        }
    }
}

2.总结

**优点:**1、职责清晰。 2、高扩展性。 3、智能化。

**缺点:**1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

相关推荐
艾利克斯冰9 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
星心源七境14 小时前
七境体系全解析:从六韬兵法到AI锁颜,一套贯穿古典智慧与现代应用的成长操作系统
人工智能·设计模式·设计
devilnumber15 小时前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式
qq_2975746715 小时前
设计模式系列文章(基础篇第21篇):迭代器模式——遍历聚合解耦,实现统一迭代访问
设计模式·迭代器模式
m0_7381207215 小时前
HVV应急溯源基础——Linux 系统安全加固配置指南(一)
linux·运维·服务器·安全·网络安全·系统安全
devilnumber17 小时前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式
禅思院17 小时前
前端请求取消与调度完全指南:从 AbortController 到企业级优先级架构
前端·设计模式·前端框架
小bo波17 小时前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
写代码的小阿帆18 小时前
行为型设计模式之观察者(发布-订阅)模式
设计模式
王_teacher19 小时前
23种设计模式全解析(GoF 设计模式)
设计模式·软考·软件设计师·软考中级