抽象的代理模式1.0版本

前言:

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

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


开始

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

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

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

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

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

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

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


代理模式的定义:

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

组成:

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

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

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

翻译一下:

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

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

来看看代码

代理商

public interface SmsService {String send(String message);
}

代理产品1

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

代理产品2

public class SmsProxy implements SmsService {private final SmsService smsService;public SmsProxy(SmsService smsService) {this.smsService = smsService;}@Overridepublic String send(String message) {System.out.println("before method send()");smsService.send(message);System.out.println("after method send()");return null;}
}

代理人

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

ok 

核心:业务 + 平台 + 业务

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651180.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java之复制图片

从文件夹中复制图片 从这个文件夹: 复制到这个空的文件夹: 代码如下: import java.io.*; import java.util.Scanner;/*** 普通文件的复制*/public class TestDome10 {public static void main(String[] args) {// 输入两个路径// 从哪里(源路…

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天,智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分,同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注,养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

用过最佳的wordpress模板

西瓜红,作为一种充满活力和激情的颜色,总是能给人留下深刻的印象。当这种鲜艳的色彩与经典的设计元素相结合时,就能打造出一款既时尚又实用的WordPress企业模板。今天,我们向您隆重推荐这款西瓜红经典配色WordPress企业模板。 这…

18种WEB常见漏洞:揭秘网络安全的薄弱点

输入验证漏洞: 认证和会话管理漏洞: 安全配置错误: 其他漏洞: 防范措施: Web 应用程序是现代互联网的核心,但它们也容易受到各种安全漏洞的影响。了解常见的 Web 漏洞类型,对于开发人员、安全测试人员和普通用户都至关重要。以下将介绍 18 种常见的 …

最受站长欢迎的wordpress模板

蓝色与黄色,作为经典的互补色,它们在企业网站设计中总能碰撞出令人印象深刻的火花。当这两种鲜艳的色彩巧妙结合时,不仅能够吸引访客的注意力,还能传达出一种活力四射、积极向上的企业形象。 今天,我们为您推荐的这款…

vue实现周日历 日历按周切换 vue日程管理

实现的功能 1、点击今天:回到今日日期并选中今日日期,查当天数据 2、点击左箭头:切换上一周 3、点击右箭头:切换下一周 4、黄圆圈代表有日程提醒,点击选中,下方对应显示当前日程提醒的内容,没有…

【论文笔记 | 异步联邦】PORT:How Asynchronous can Federated Learning Be?

1. 论文信息 How Asynchronous can Federated Learning Be?2022 IEEE/ACM 30th International Symposium on Quality of Service (IWQoS). IEEE, 2022,不属于ccf认定 2. introduction 2.1. 背景: 现有的异步FL文献中设计的启发式方法都只反映设计空…

c++输入年月日,计算是该年的第几天

直接把每个月的天数存到数组直接相加会很方便&#xff0c;不用过多的判断。 注意&#xff1a;润年判断方法&#xff08;可以被4整除但不能被100整除&#xff0c;或者可以被400整除&#xff09; #include <iostream> using namespace std;int main() {int year,month,da…

如何在vue3+vite中优雅的使用iconify图标

前言 从Vue2迁移到Vue3&#xff0c;在使用上有着很大的差别。本文的话主要是针对图标的使用差别上进行分析&#xff0c;同时给出基于iconify图标库中unplugin-icons的用法。这里特殊说明一下&#xff1a;其实element-plus中用到的图标也是基于iconify图标库的&#xff0c;在我们…

创新入门|AI如何个性化重塑B2B营销,五大法宝助您领先市场

人工智能&#xff08;AI&#xff09;在企业对企业&#xff08;B2B&#xff09;营销中的出现&#xff0c;标志着从传统战略向高效、个性化方法的关键转变。 这一演变凸显了人工智能在了解复杂的市场动态和客户偏好方面的重要性&#xff0c;为建立更有针对性、以结果为导向的营销…

人工智能如何提高公司效率的 5 种方法

人工智能是当今最热门的话题之一&#xff0c;但并不是每个人都了解其对商业的价值规模。由此可见&#xff0c;现有的AI技术可以将企业的生产力提升40%。 在机器学习的帮助下&#xff0c;Netflix 利用自动化个性化推荐每年赚取 10 亿美元。当公司使用人工智能时&#xff0c;34%…

SpringSecurity + Oauth2 + jwt实现单点登录

文章目录 前言一、springsecurity oauth2 redis方式的缺点二、oauth2认证的4种模式的选择三、认证服务器的编写 第一步、创建WebSecurity配置类第二步、创建jwt仓库配置类第三步、创建UserDetailsService类第四步、创建认证服务器配置类 四、测试认证服务器的功能 1.创建Login…