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

pta编程网站中国石化工程建设有限公司设计许可证编号

pta编程网站,中国石化工程建设有限公司设计许可证编号,网站的后端用什么软件做,天蝎网络服务公司以下是一个结合代理模式解决实际问题的Java实现案例,涵盖远程调用、缓存优化、访问控制等场景,包含逐行中文注释: 场景描述 开发一个跨网络的文件查看器,需实现: 远程文件访问:通过代理访问网络文件 缓存…

以下是一个结合代理模式解决实际问题的Java实现案例,涵盖远程调用、缓存优化、访问控制等场景,包含逐行中文注释:

场景描述

开发一个跨网络的文件查看器,需实现:
远程文件访问:通过代理访问网络文件
缓存机制:减少重复下载开销
访问控制:限制敏感文件访问
大文件延迟加载:不立即加载大文件
访问日志:记录文件访问记录

完整代码实现

import java.lang.reflect.*;
import java.util.*;/*** 文件服务接口(Subject)*/
interface FileService {byte[] getFile(String filename) throws Exception;List<String> listFiles() throws Exception;
}/*** 远程文件服务(RealSubject)*/
class RemoteFileService implements FileService {// 模拟网络延迟private void simulateNetworkDelay() throws InterruptedException {Thread.sleep(1000);}@Overridepublic byte[] getFile(String filename) throws Exception {simulateNetworkDelay();System.out.println("下载远程文件:" + filename);return ("内容:" + filename).getBytes(); // 模拟文件内容}@Overridepublic List<String> listFiles() throws Exception {simulateNetworkDelay();return Arrays.asList("file1.txt", "file2.jpg", "secret.doc");}
}/*** 智能代理(包含缓存、权限控制、日志)*/
class FileServiceProxy implements InvocationHandler {private final FileService realService;private final Map<String, byte[]> cache = new HashMap<>();private final Set<String> blockedFiles = Set.of("secret.doc");private final User user;// 动态代理构造器public static FileService createProxy(User user) {return (FileService) Proxy.newProxyInstance(FileService.class.getClassLoader(),new Class[]{FileService.class},new FileServiceProxy(new RemoteFileService(), user));}private FileServiceProxy(FileService realService, User user) {this.realService = realService;this.user = user;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 访问控制if (method.getName().equals("getFile")) {String filename = (String) args[0];checkAccessPermission(filename);}// 缓存逻辑if (method.getName().equals("getFile")) {String filename = (String) args[0];if (cache.containsKey(filename)) {System.out.println("从缓存获取文件:" + filename);return cache.get(filename);}}// 记录日志long start = System.currentTimeMillis();Object result = method.invoke(realService, args);long duration = System.currentTimeMillis() - start;// 后处理if (method.getName().equals("getFile")) {String filename = (String) args[0];cache.put(filename, (byte[]) result);System.out.printf("文件%s获取耗时:%dms\n", filename, duration);}return result;}private void checkAccessPermission(String filename) throws SecurityException {if (blockedFiles.contains(filename) && !user.isAdmin()) {throw new SecurityException("无权访问敏感文件:" + filename);}}
}/*** 用户权限类*/
class User {private final String username;private final boolean admin;public User(String username, boolean admin) {this.username = username;this.admin = admin;}public boolean isAdmin() {return admin;}
}// ================== 客户端代码 ==================
public class ProxyPatternDemo {public static void main(String[] args) {// 创建普通用户代理User normalUser = new User("Alice", false);FileService proxy = FileServiceProxy.createProxy(normalUser);try {// 第一次获取文件(触发真实下载)proxy.getFile("file1.txt");// 再次获取相同文件(命中缓存)proxy.getFile("file1.txt");// 尝试访问敏感文件proxy.getFile("secret.doc");} catch (Exception e) {System.out.println("访问异常:" + e.getMessage());}// 管理员访问测试User admin = new User("Admin", true);FileService adminProxy = FileServiceProxy.createProxy(admin);try {adminProxy.getFile("secret.doc");} catch (Exception e) {e.printStackTrace();}}
}

最佳实践建议

一般的代理有注解式的@Aspect,或者写拦截器进行代理增强,如果系统基于spring,推荐使用spring框架的@Aspect。
如果不关注spring的相关生命周期等等,可以自己使用拦截器增强业务方法进行代理。最好不要自己实现反射去代理,实现复杂,并且不能搭配spring的依赖注入获取代理对象,只能自己管控代理对象生命周期。

一句话总结

代理模式的目的就是为了在不改变原有对象的基础上,对原有对象进行增强。


文章转载自:

http://kFWhYSDK.pcngq.cn
http://MB4o2rX3.pcngq.cn
http://0ozy2RIJ.pcngq.cn
http://jbNNMaQ3.pcngq.cn
http://RcaKwIE5.pcngq.cn
http://rrrlv5BZ.pcngq.cn
http://llGUMxoa.pcngq.cn
http://WNBdFfPW.pcngq.cn
http://vpid2wn4.pcngq.cn
http://HXDAXeAF.pcngq.cn
http://k0q9hV0k.pcngq.cn
http://QetplrFR.pcngq.cn
http://2f2u3utv.pcngq.cn
http://9B4fDtH3.pcngq.cn
http://OK6w3A9f.pcngq.cn
http://ohI1hXMJ.pcngq.cn
http://vUB3OBp8.pcngq.cn
http://Lzbrj0i0.pcngq.cn
http://bVX5xUQm.pcngq.cn
http://WDSlNzN5.pcngq.cn
http://UomPlrI1.pcngq.cn
http://O9h7Nd2m.pcngq.cn
http://NRy8eTxo.pcngq.cn
http://7ELoO9U0.pcngq.cn
http://zuMtlPV5.pcngq.cn
http://iyoVoU1N.pcngq.cn
http://7UjOmKur.pcngq.cn
http://Vzlt1HEe.pcngq.cn
http://wmzF4ZqX.pcngq.cn
http://h4IVCXi0.pcngq.cn
http://www.dtcms.com/wzjs/724826.html

相关文章:

  • 用手机网站做app加利弗设计公司官网
  • 做网站是要编程吗南宁黄页电话号码查询
  • seo如何推广网站智慧团建注册登记入口
  • 石家庄网站建设招商spark网站开发
  • 帮客户做传销网站wordpress doc导入
  • 那个装修公司的网站做的好网站建设 接单
  • 无锡优化网站费用韩城建设公司网站
  • 做我的世界背景图的网站室内设计公司和装修公司的区别
  • 推广网站可以做跳转吗新网站多久收录
  • 淄博网络公司做网站的电话网站的工商网监怎么做进去
  • 怎么介绍网站的优缺点网站的设计原则有哪些
  • 网站大全全部规范门户网站的建设和管理办法
  • 沈阳室内设计公司网站关键词优化方案
  • php 网站 上传到空间百度账户
  • 12380网站建设存在的问题红鱼洞水库建设管理局网站
  • 全栈网站开发流程图wordpress 多个域名
  • 微网站开发多少钱新手要如何让网站被收录
  • 大连市城乡建设厅网站深圳网站设计深圳网站建设
  • 上海国际物流网站建设h5手游平台
  • 网站建设的实验原理和方法免费域名app下载
  • 协助别人做网站犯法么凡客诚品服装购物网
  • 空包网站怎么做做网站后台有前途吗
  • 自考网站建设与管理怎样做投资网站
  • 做网站的公司怎么推销复古传奇手游排行榜第一名
  • 建设服装网站目的和作用wordpress深度修改
  • 遵义市营商环境建设局网站wordpress一周热门文章
  • 专业建设外贸网站制作江门公路局网站建设方案
  • 做网站都需要什么资料wordpress5.0.2主题更换
  • flash网站推荐最新网站制作公司哪个好
  • 深圳做棋牌网站建设哪家技术好商洛做网站的公司电话