设计模式8:代理模式-静态代理
我尝试在JDK、Android SDK和一些出名的库中,寻找静态代理的源码,没能找到。如果有读者发现,欢迎评论或者私信我。
本文目录
- 静态代理的实例
- 1. 售票代理
- 2. 明星代理
静态代理的实例
1. 售票代理
售票服务
public interface TicketService { //售票 public void sellTicket(); //问询 public void inquire(); //退票 public void withdraw();
}
站点售票
public class Station implements TicketService { @Override public void sellTicket() { System.out.println("\n\t售票.....\n"); } @Override public void inquire() { System.out.println("\n\t问询。。。。\n"); } @Override public void withdraw() { System.out.println("\n\t退票......\n"); } }
代理网点售票
public class StationProxy implements TicketService { private Station station; public StationProxy(Station station){ this.station = station; } @Override public void sellTicket() { // 1.做真正业务前,提示信息 this.showAlertInfo("××××您正在使用车票代售点进行购票,每张票将会收取5元手续费!××××"); // 2.调用真实业务逻辑 station.sellTicket(); // 3.后处理 this.takeHandlingFee(); this.showAlertInfo("××××欢迎您的光临,再见!××××\n"); } @Override public void inquire() { // 1.做真正业务前,提示信息 this.showAlertInfo("××××欢迎光临本代售点,问询服务不会收取任何费用,本问询信息仅供参考,具体信息以车站真实数据为准!××××"); // 2.调用真实逻辑 station.inquire(); // 3。后处理 this.showAlertInfo("××××欢迎您的光临,再见!××××\n"); } @Override public void withdraw() { // 1.真正业务前处理 this.showAlertInfo("××××欢迎光临本代售点,退票除了扣除票额的20%外,本代理处额外加收2元手续费!××××"); // 2.调用真正业务逻辑 station.withdraw(); // 3.后处理 this.takeHandlingFee(); } /* * 展示额外信息 */ private void showAlertInfo(String info) { System.out.println(info); } /* * 收取手续费 */ private void takeHandlingFee() { System.out.println("收取手续费,打印发票。。。。。\n"); } }
2. 明星代理
public interface IStar {public abstract void sing(double money);
}public class StarImpl implements IStar {public void sing(double money) {System.out.println("唱歌,收入" + money + "元");}
}//经纪人
public class StarProxy implements IStar {private StarImpl star = new StarImpl();public void sing(double money) {System.out.println("请先预约时间");System.out.println("沟通出场费用");if (money < 100000) {System.out.println("对不起,出场费10w万以内不受理");return;}System.out.println("经纪人抽取了" + money * 0.2 + "元代理费用");star.sing(money * 0.8);}
}//测试
public class ProxyDemo {public static void main(String[] args) {StarProxy sg = new StarProxy();sg.sing(200000);}
}
相关文章:
设计模式8:代理模式-静态代理
我尝试在JDK、Android SDK和一些出名的库中,寻找静态代理的源码,没能找到。如果有读者发现,欢迎评论或者私信我。 本文目录 静态代理的实例1. 售票代理2. 明星代理 静态代理的实例 1. 售票代理 售票服务 public interface TicketService {…...
运动耳机哪款好用、适合运动的耳机推荐
如今,蓝牙耳机不仅是手机的最佳伴侣,也成为了运动爱好者的必备装备。但是,在如此众多的蓝牙耳机中,你是否对选购感到困惑呢?实际上,选择适合运动的蓝牙耳机需要考虑许多因素,如舒适度、稳固性、…...
页面滑动到可视区域加载更多内容思维流程
页面滑动到可视区域加载更多内容思维流程...
Java Word转PDF(直接转和以图片形式转)、PDF转图片、图片转PDF
在淘宝上找了一家写代码的店铺写了一个工具类,再参考网上的代码,改了改 用到的类库: <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><!--word转pdf--><dependency><groupId>com.documents4…...
dockerfile编写LNMP
目录 1. 项目环境 2. 服务器环境 二、部署nginx(容器IP为192.168.158.26) 1、整个Dockerfile文件内容 编辑 2、配置nginx.conf文件 3、构建镜像 三、部署mysql 1、整个Docker文件内容 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PHP部署 1…...
websocket + stomp + sockjs学习
文章目录 学习链接后台代码引入依赖application.ymlWebSocketConfigPrivateControllerWebSocketService WebSocketEventListenerCorsFilter 前端代码Room.vue 学习链接 WebSocket入门教程示例代码,代码地址已fork至本地gitee,原github代码地址ÿ…...
ApplicationListener , @EventListener 和 CommandLineRunner 启动顺序验证
一. 背景 排查线上问题, 发现一个重要功能的全局锁线程启动延迟很高. 服务启动40分钟之后, 才能拿到锁. 排查之后发现原因是因为代码引入了高优先级的ApplicationListener代码, 导致全局锁线程启动延迟. 二. 结论 启动顺序从高到底依次为: ApplicationListener , EventListe…...
网络编程基础(1)
目录 网络编程解决是跨主机的进程间通讯 1、网络 2、互联网 3、ip地址 (1)ipv4: (2)ipV6:1 (3)IP地址的组成: (4)Linux查看IP地址:ifconfig 4、mac地址 5、ping Ip地址 6…...
Linux驱动开发(Day4)
思维导图: 字符设备驱动分步注册:...
LVS负载均衡群集部署(LVS-NAT模型实例)
一、集群 1.1集群的含义 Cluster,集群、群集,为解决某个特定问题将多台计算机组合起来形成的单个系统。 由多台主机构成,但对外只表现为一个整体。 1.2群集的三种类型 1.2.1负载均衡群集 LB: Load Balancing,负载均衡&#x…...
【仿写tomcat】五、响应静态资源(访问html页面)、路由支持以及多线程改进
访问html页面 如果我们想访问html页面其实就是将本地的html文件以流的方式响应给前端即可,下面我们对HttpResponseServlet这个类做一些改造 package com.tomcatServer.domain;import com.tomcatServer.utils.ScanUtil;import java.io.IOException; import java.io…...
stm32单片机/51单片机蜂鸣器不响(proteus模拟)
蜂鸣器不发生原因就1个:电压不够 所以需要提高蜂鸣器2端的电压:可以采用的方法有: 1提高蜂鸣器电阻,这样根据分压原理,可以提升蜂鸣器2段电压 2更改蜂鸣器的工作电压为更小的值,这个可以通过在proteus内…...
BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4
BERT、ERNIE、Grover、XLNet、GPT、MASS、UniLM、ELECTRA、RoBERTa、T5、C4 ELMOBERTERNIEGroverXLNetGPTMASSUniLMELECTRARoBERTaT5C4ELMO BERT...
主机防护的重要性和方式
01 主机防护的重要性 主机防护是网络安全的重要组成部分。在互联网时代,网络攻击成为了一种常见的威胁,而主机防护则是保护计算机系统免受网络攻击的重要手段。 主机防护可以防范各种网络攻击,如病毒、木马、黑客攻击等,从而保…...
聚观早报 | 抢先体验阿维塔11座舱;本田和讴歌采用NACS充电标准
【聚观365】8月21日消息 抢先体验阿维塔11鸿蒙座舱 本田和讴歌采用特斯拉NACS充电标准 华为秋季新品发布会将于9月12日举行 iQOO Z8即将到来 三星Galaxy S24系列外观或更改 抢先体验阿维塔11鸿蒙座舱 当前,智能座舱成了各大巨头跑马圈地的重要领域。根据毕马威…...
思科计算机网络答案(包含第1~11章节)
第一章 1.在以下哪个场景中推荐使用 WISP? 选择一项: A.城市里的网吧 B.没有有线宽带接入的农村地区的农场 C.任何有多个无线设备的家庭 D.通过有线连接访问 Internet 的大厦公寓 2.一位员工希望以尽可能最安全的方式远程访问公司网络。 下列哪种网络特征将允许员工获得对…...
所见即所得,「Paraverse平行云」助力万间打造智能建造新图景
在城市建设行业中,数字化逐渐成为其主导力量。 新一代信息基础设施建设也迎来了新的里程碑。数据显示,截至今年,我国已全面推进城市信息模型(CIM)基础平台建设,为城市规划、建设管理提供了多场景应用的强大…...
AI图片处理功能演示
例如,这是一张不错的图片,但是有3只手。 我们可以选择有问题的区域,然后要求 niji 进行重新绘制。 根据我们选择的区域,我们可以以不同的方式修复结果。 创意修复 修复并不仅限于纠正错误。我们可以要求 niji 添加额外的元素&…...
CentOS系统环境搭建(六)——使用docker-compose安装redis
centos系统环境搭建专栏🔗点击跳转 关于Docker-compose安装请看CentOS系统环境搭建(三)——Centos7安装Docker&Docker Compose,该文章同样收录于centos系统环境搭建专栏。 Docker-compose安装redis 文章目录 Docker-compose安…...
个人论坛项目测试报告
目录 0.项目概述及部分测试用例展示 以下是部分测试用例: 进行一般的性能测试性能测试 1.摘要及版本修订记录 2.功能介绍 3.测试范围 3.1.功能性 3.2.可靠性 3.3.易用性 4.测试资源 4.1.人员介绍 4.2.测试环境 4.2.测试工具 5.测试策略 5.2.功能测试…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
