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

相关推荐
小马爱打代码1 天前
MyBatis设计模式:构建者、工厂、代理模式
设计模式·mybatis·代理模式
a3535413824 天前
设计模式-代理模式
c++·设计模式·代理模式
leoufung6 天前
LeetCode 72. Edit Distance(编辑距离)动态规划详解
leetcode·动态规划·代理模式
cike_y9 天前
Spring:代理模式之静态代理&动态代理
java·后端·spring·代理模式
期待のcode11 天前
Java的代理模式
java·开发语言·代理模式
老朱佩琪!16 天前
Unity代理模式
unity·游戏引擎·代理模式
2501_9167665416 天前
【Java】代理模式---静态代理与动态代理
java·开发语言·代理模式
山沐与山16 天前
【设计模式】 Python代理模式:从入门到实战
python·设计模式·代理模式
明洞日记19 天前
【设计模式手册021】代理模式 - 如何控制对象访问
设计模式·系统安全·代理模式
会员果汁22 天前
4.设计模式-代理模式
设计模式·代理模式