抽象的代理模式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版本,仅供参考,不算很完善

相关推荐
kruptos2 小时前
动态规划:暴力递归如何变优雅?
代理模式·算法优化·斐波那契
ydd10010016 天前
正则表达式匹配
正则表达式·代理模式
LayZhangStrive18 天前
设计模式(二)装饰器模式、代理模式(待更新)
设计模式·代理模式·装饰器模式·后端开发
Lam Tang23 天前
APS 系列文章10
java·代理模式
Lam Tang23 天前
APS 系列文章 08
java·代理模式
wangjialelele23 天前
动态规划DP经典题型总结(Java、C++):路径、子数组、子序列、背包问题详解
java·c++·算法·面试·动态规划·代理模式
聪明蛋子哟23 天前
从MCP到A2A再到Proxy:Agent-工具协议的三种代理模式
代理模式
Lam Tang23 天前
APS 系列文章 09
java·代理模式
Lam Tang24 天前
APS 系列文章 01
java·代理模式
只吃不吃香菜1 个月前
Windows 下基于 YAML 规则的指定域名分流:以哔哩哔哩为例
网络·网络协议·计算机网络·网络安全·代理模式