抽象的代理模式1.0版本

前言:

在阅读Spring Security官方文档时,里面设计到了一种设计模式------代理模式Proxy

众里寻她千百度,蓦然回首,那人却在灯火阑珊处


开始

在之前的文章里陈述了一个观点------编程语言和语言没有区别

现看看我们日常生活中的代理,代理这个词可能听得少,但是加一个被修饰词就听多了

现实中最常见的代理模式:麦当劳,华莱士,手机旗舰店,连锁餐饮店

小故事:站长我啊,手机坏了,不知道怎么修,只能去找对应的旗舰店去修,店长(代理人)看见我笑嘻嘻,但是他笑不出声,因为站长的手机是五年前的,他们旗舰店没有对应的配件,他也不会修,只好把我的手机寄到代理商,代理商专门帮我解决,这也是有些店修手机一个小时就好,而有些店修手机要修他个12小时

总结:在现实中的代理模式中,代理人起到的是对接业务,代理商呢?代理是直接处理业务吗?

很显然不是,代理商只提供了一个平台,处理业务的是代理产品

业务 + 平台 + 业务 = 代理模式


代理模式的定义:

所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。(百度百科)

组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

翻译一下:

在面向对象编程时,这个角色翻译成对象更符合语境

稍微做了一些修改,真实对象,实际上就是实现业务逻辑的对象

来看看代码

代理商

java 复制代码
public interface SmsService {
    String send(String message);
}

代理产品1

java 复制代码
public class SmsServiceImpl implements SmsService {
    public String send(String message) {
        System.out.println("send message:" + message);
        return message;
    }
}

代理产品2

java 复制代码
public class SmsProxy implements SmsService {

    private final SmsService smsService;

    public SmsProxy(SmsService smsService) {
        this.smsService = smsService;
    }

    @Override
    public String send(String message) {
        System.out.println("before method send()");
        smsService.send(message);
        System.out.println("after method send()");
        return null;
    }
}

代理人

java 复制代码
public class Main {
    public static void main(String[] args) {
        SmsService smsService = new SmsServiceImpl();
        SmsProxy smsProxy = new SmsProxy(smsService);
        smsProxy.send("java");
    }
}

ok

核心:业务 + 平台 + 业务

1.0版本,仅供参考,不算很完善

相关推荐
蜡笔小马21 小时前
10.C++设计模式-代理模式
c++·设计模式·代理模式
BUG制造者:图图1 天前
MiMo 模型 Tool Calls 400 报错终极解决方案——Reasoning Content 代理中间件
中间件·代理模式·mimo·小米模型
雪度娃娃3 天前
结构型设计模式——代理模式
java·c++·设计模式·系统安全·代理模式
庞轩px5 天前
第六篇:Spring用了哪些设计模式?——从单例到代理,拆解框架中的经典设计
java·spring·设计模式·bean·代理模式·aop·单例
多加点辣也没关系6 天前
数据结构与算法|第二十四章:算法思维总结与实战
算法·代理模式
c++之路6 天前
代理模式(Proxy Pattern)
开发语言·c++·代理模式
qq_三哥啊11 天前
【mitmproxy】通过 mitmproxy 的HTTP代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·http·代理模式
AI人工智能+电脑小能手12 天前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
AI人工智能+电脑小能手14 天前
【大白话说Java面试题】【Java基础篇】第29题:静态代理和动态代理的区别是什么
java·开发语言·后端·面试·代理模式
qq_三哥啊16 天前
【mitmproxy】提取 OpenCode 的 API 接口
网络·代理模式