设计模式,代理模式

代理模式概述

代理模式,就是让一些功能让代理方去完成的模式。代理模式分为三部分:代理功能接口、被代理角色,代理角色。

  • 代理功能接口:其实不是指代理模式要额外创建一个接口进行代理,而是说,代理角色和被代理角色都要实现指定功能对应的接口。比如,被代理角色的a功能需要被代理,而a功能是A接口下的,那么被代理角色和代理角色都要实现A接口。
  • 被代理角色:被代理角色的某些功能需要被代理角色来代理完成。
  • 代理角色:代理角色负责完成被代理角色需要被代理的功能。

代码实现

若小明要送信给小红,但是小明抽不出时间跑路,于是让身为邮递员的老刘帮忙送信给小红。

代理功能接口

java 复制代码
public interface ISender {
    void sendLetter(Person person);
}

小明的需要被代理的功能是送信,老刘也要有送信的功能,二者都要实现送信功能的接口。

被代理角色

java 复制代码
public class RealSender extends Person implements ISender {
    public RealSender(String name){
        this.name = name;
    }
    @Override
    public void sendLetter(Person person) {
        System.out.println("将信送到" + person.getName() + "手中");
    }
}

Person就是一个类,类中的name属性继承给子类。被代理角色倒没有什么要注意的,可能设计被代理角色之后才发现有功能需要被代理。

代理角色

java 复制代码
public class Postman extends Person implements ISender {
    private ISender sender;
    public Postman(String name,ISender sender){
        this.name = name;
        this.sender = sender;
    }
    @Override
    public void sendLetter(Person person) {
        this.sender.sendLetter(person);
    }
}

代理角色中要有一个属性用来注入被代理角色的对象,以方便让代理角色来代理被代理角色的功能。在代理角色中,调用被代理角色的功能即可完成代理。

业务代码

java 复制代码
public class Main {
    public static void main(String[] args) {
        RealSender sender = new RealSender("小明");
        Receiver receiver = new Receiver("小红");

        Postman postman = new Postman("老刘",sender);

        postman.sendLetter(receiver);
    }
}

总结

代理模式就是一个对象让另一个对象为它打工。代理模式分为动态代理和静态代理,精妙的地方主要在动态代理,想了解的可以看我主页博客SSM框架,spring-aop的学习,在AOP中就可以实现将重复冗余的代码让代理对象来执行,以实现简化代码。

这里代理模式东西不多,更多知识点在AOP的学习中已经写过了,就不重复写了,见以上链接。

相关推荐
AINative软件工程8 小时前
LLM 应用的 Feature Flag 工程实践:Prompt、模型与 AI 行为的生产安全灰度
后端·llm·ai编程
莫得感情 o9 小时前
设计模式 17 · 责任链模式
设计模式·责任链模式
weixin_431600449 小时前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
Larcher15 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher15 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
LucianaiB17 小时前
毕业老学长给我留的最后一句话是:“AI 写的,别挂我名。” 我直接 神(Seed Evolving) 来!助我!
后端
IvanCodes17 小时前
RAG 实战教程(一):RAG 工作原理与完整流程——分片、索引、召回、重排和生成
人工智能·后端·agent
·薯条大王17 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
用户9385156350718 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep18 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员