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

相关推荐
geovindu12 小时前
go: Proxy Pattern
开发语言·后端·设计模式·golang·代理模式
我爱cope4 天前
【从0开始学设计模式-12| 代理模式】
设计模式·代理模式
两年半的个人练习生^_^5 天前
每日一学:设计模式之代理模式
java·设计模式·代理模式
天若有情6736 天前
用动态规划思路,一步一步实现响应式数据(从本质到落地)
算法·动态规划·代理模式
希望永不加班6 天前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式
阿Y加油吧8 天前
动态规划经典题解:最长递增子序列 & 乘积最大子数组
算法·动态规划·代理模式
计算机安禾9 天前
【数据结构与算法】第48篇:算法思想(三):贪心算法
c语言·开发语言·数据结构·算法·贪心算法·代理模式·图论
Java成神之路-10 天前
零基础入门:动态代理与 Spring AOP 核心知识点总结
spring·代理模式
阿Y加油吧10 天前
从斐波那契到动态规划:两道入门题吃透 DP 核心思想
算法·动态规划·代理模式
Rsun0455111 天前
8、Java 代理模式从入门到实战
java·系统安全·代理模式