• 抽象的代理模式1.0版本


    前言:

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

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


    开始

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

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

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

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

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

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

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


    代理模式的定义:

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

    组成:

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

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

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

    翻译一下:

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

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

    来看看代码

    代理商

    1. public interface SmsService {
    2. String send(String message);
    3. }

    代理产品1

    1. public class SmsServiceImpl implements SmsService {
    2. public String send(String message) {
    3. System.out.println("send message:" + message);
    4. return message;
    5. }
    6. }

    代理产品2

    1. public class SmsProxy implements SmsService {
    2. private final SmsService smsService;
    3. public SmsProxy(SmsService smsService) {
    4. this.smsService = smsService;
    5. }
    6. @Override
    7. public String send(String message) {
    8. System.out.println("before method send()");
    9. smsService.send(message);
    10. System.out.println("after method send()");
    11. return null;
    12. }
    13. }

    代理人

    1. public class Main {
    2. public static void main(String[] args) {
    3. SmsService smsService = new SmsServiceImpl();
    4. SmsProxy smsProxy = new SmsProxy(smsService);
    5. smsProxy.send("java");
    6. }
    7. }

    ok 

    核心:业务 + 平台 + 业务

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

  • 相关阅读:
    DSPE-PEG-iRGD,磷脂-聚乙二醇-靶向穿膜肽iRGD,用于主动靶向研究
    基于Python+TensorFlow+Django的交通标志识别系统
    极智开发 | ubuntu 安装和配置 git
    2024年度西咸新区科技计划项目征集类别、申报要求和时间程序
    学习太极创客 — MQTT 第二章(二)ESP8266 QoS 应用
    进程:execve加载流程
    10.10 翻译设置
    宝塔等Nginx环境添加允许跨域Header头
    [已解决]Arcpy中ERROR 001100: Failed because no statistics are available.
    独立站营销广告的投放技巧和方法
  • 原文地址:https://blog.csdn.net/c_yanxin_ru/article/details/138089835