当前位置: 首页 > news >正文

代理模式介绍及具体实现(设计模式 三)

代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问

实例介绍和实现过程

假设我们正在开发一个电子商务网站,其中有一个商品库存管理系统。我们希望在每次查询商品库存之前,先进行权限验证,以确保只有授权用户可以访问库存信息。这时候可以使用代理模式来实现。

1、首先,定义一个商品库存接口:

public interface Inventory {//被代理的功能int getStock(String productId);
}

2、创建真实的库存管理类,实现该接口

public class InventoryManager implements Inventory {//实际的功能@Overridepublic int getStock(String productId) {// 实际的库存查询逻辑return 100;}
}

3、创建一个代理类,该代理类实现功能的接口,用于进行权限验证并调用真实的库存管理类

public class InventoryProxy implements Inventory {//被代理的类引用private Inventory inventory;private String username;private String password;//初始化代理类public InventoryProxy(String username, String password) {this.username = username;this.password = password;}//代理的功能@Overridepublic int getStock(String productId) {//实现功能前先进行验证身份if (authenticate()) {//验证通过if (inventory == null) {inventory = new InventoryManager();}//使用功能return inventory.getStock(productId);} else {// 权限验证失败,返回一个特定的值或抛出异常return -1;}}//验证方法private boolean authenticate() {// 进行权限验证的逻辑// 这里假设验证逻辑为管理员身份才能操作return username.equals("admin") && password.equals("admin");}
}

4、使用功能

public class Main {public static void main(String[] args) {//创建代理类Inventory inventory = new InventoryProxy("admin", "admin");//执行操作int stock = inventory.getStock("10");System.out.println("操作结果: " + stock);}
}
http://www.lryc.cn/news/184954.html

相关文章:

  • 【18】c++设计模式——>适配器模式
  • mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:
  • 【SpringBoot】多环境配置和启动
  • 跨qml通信
  • 力扣-404.左叶子之和
  • 如何搭建一个 websocket
  • pip常用命令
  • [QT编程系列-43]: Windows + QT软件内存泄露的检测方法
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-5】处理输入-思维链推理
  • java Spring Boot RequestHeader设置请求头,当请求头中没有Authorization 直接400问题解决
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入
  • 双机并联逆变器自适应虚拟阻抗下垂控制(Droop)策略Simulink仿真模型
  • 8月份,誉天79名学员通过HCIE认证!
  • Quarto 入门教程 (2):如何使用并编译出不同文档
  • 【C++设计模式之命令模式:行为型】分析及示例
  • 二、Excel VBA 简单使用
  • 获取url后面的参数
  • python入门篇07-数据容器(序列 集合 字典,json初识)基础(下)
  • 阿里云服务器公网带宽价格表“按固定带宽”计费模式
  • MTK的充电方案—PMIC充电
  • 【Overload游戏引擎分析】画场景栅格的Shader分析
  • 智能化物流管理:全国快递物流查询API的角色与优势
  • Spring Boot如何配置CORS支持
  • Mybatis 拦截器(Mybatis插件原理)
  • AXI总线协议基础--几分钟熟悉通道信号和基础架构
  • matlab数学建模方法与实践 笔记汇总
  • [UE虚幻引擎] DTCopyFile 插件说明 – 使用蓝图拷贝复制文件 (Windows)
  • 如何用ChatGPT学或教英文?5个使用ChatGPT的应用场景!
  • 基于spirngboot人事考勤管理信息系统
  • QT界面窗口 (widget)的显示和隐藏,关闭