如何做企业套模网站互联网公司招聘信息

张小明 2026/1/8 19:30:43
如何做企业套模网站,互联网公司招聘信息,网站建设和前端开发的区别,wordpress交易平台主题对代理模式的理解 生活场景1#xff1a;牛村的牛二看上了隔壁村小花#xff0c;牛二不好意思直接找小花#xff0c;于是牛二找来了媒婆王妈妈。这里面就有一个非常典型的代理模式。牛二不能和小花直接对接#xff0c;只能找一个中间人。其中王妈妈是代理类#xff0c;牛二…对代理模式的理解生活场景1牛村的牛二看上了隔壁村小花牛二不好意思直接找小花于是牛二找来了媒婆王妈妈。这里面就有一个非常典型的代理模式。牛二不能和小花直接对接只能找一个中间人。其中王妈妈是代理类牛二是目标类。王妈妈代替牛二和小花先见个面。现实生活中的婚介所【在程序中对象A和对象B无法直接交互时。】生活场景2你刚到北京要租房子可以自己找也可以找链家帮你找。其中链家是代理类你是目标类。你们两个都有共同的行为找房子。不过链家除了满足你找房子另外会收取一些费用的。(现实生活中的房产中介)【在程序中功能需要增强时。】西游记场景八戒和高小姐的故事。八戒要强抢民女高翠兰。悟空得知此事之后怎么做的悟空幻化成高小姐的模样。代替高小姐与八戒会面。其中八戒是客户端程序。悟空是代理类。高小姐是目标类。那天夜里在八戒眼里眼前的就是高小姐对于八戒来说他是不知道眼前的高小姐是悟空幻化的在他内心里这就是高小姐。所以悟空代替高小姐和八戒亲了嘴儿。这是非常典型的代理模式实现的保护机制。代理模式中有一个非常重要的特点对于客户端程序来说使用代理对象时就像在使用目标对象一样。【在程序中目标需要被保护时】业务场景系统中有A、B、C三个模块使用这些模块的前提是需要用户登录也就是说在A模块中要编写判断登录的代码B模块中也要编写C模块中还要编写这些判断登录的代码反复出现显然代码没有得到复用可以为A、B、C三个模块提供一个代理在代理当中写一次登录判断即可。代理的逻辑是请求来了之后判断用户是否登录了如果已经登录了则执行对应的目标如果没有登录则跳转到登录页面。【在程序中目标不但受到保护并且代码也得到了复用。】代理模式是GoF23种设计模式之一。属于结构型设计模式。代理模式的作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下一个客户不想或者不能直接引用一个对象此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用并且可以通过代理对象去掉客户不应该看到的内容和服务或者添加客户需要的额外服务。 通过引入一个新的对象来实现对真实对象的操作或者将新的对象作为真实对象的一个替身这种实现机制即为代理模式通过引入代理对象来间接访问一个对象这就是代理模式的模式动机。代理模式中的角色代理类代理主题目标类真实主题代理类和目标类的公共接口抽象主题客户端在使用代理类时就像在使用目标类不被客户端所察觉所以代理类和目标类要有共同的行为也就是实现共同的接口。代理模式的类图代理模式在代码实现上包括两种形式静态代理动态代理静态代理现在有这样一个接口和实现类packagecom.powernode.mall.service;/** * 订单接口 * author 动力节点 * version 1.0 * className OrderService * since 1.0 **/publicinterfaceOrderService{/** * 生成订单 */voidgenerate();/** * 查看订单详情 */voiddetail();/** * 修改订单 */voidmodify();}packagecom.powernode.mall.service.impl;importcom.powernode.mall.service.OrderService;/** * author 动力节点 * version 1.0 * className OrderServiceImpl * since 1.0 **/publicclassOrderServiceImplimplementsOrderService{Overridepublicvoidgenerate(){try{Thread.sleep(1234);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单已生成);}Overridepublicvoiddetail(){try{Thread.sleep(2541);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单信息如下******);}Overridepublicvoidmodify(){try{Thread.sleep(1010);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单已修改);}}其中Thread.sleep()方法的调用是为了模拟操作耗时。项目已上线并且运行正常只是客户反馈系统有一些地方运行较慢要求项目组对系统进行优化。于是项目负责人就下达了这个需求。首先需要搞清楚是哪些业务方法耗时较长于是让我们统计每个业务方法所耗费的时长。如果是你你该怎么做呢第一种方案直接修改Java源代码在每个业务方法中添加统计逻辑如下packagecom.powernode.mall.service.impl;importcom.powernode.mall.service.OrderService;/** * author 动力节点 * version 1.0 * className OrderServiceImpl * since 1.0 **/publicclassOrderServiceImplimplementsOrderService{Overridepublicvoidgenerate(){longbeginSystem.currentTimeMillis();try{Thread.sleep(1234);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单已生成);longendSystem.currentTimeMillis();System.out.println(耗费时长(end-begin)毫秒);}Overridepublicvoiddetail(){longbeginSystem.currentTimeMillis();try{Thread.sleep(2541);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单信息如下******);longendSystem.currentTimeMillis();System.out.println(耗费时长(end-begin)毫秒);}Overridepublicvoidmodify(){longbeginSystem.currentTimeMillis();try{Thread.sleep(1010);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(订单已修改);longendSystem.currentTimeMillis();System.out.println(耗费时长(end-begin)毫秒);}}需求可以满足但显然是违背了OCP开闭原则。这种方案不可取。第二种方案编写一个子类继承OrderServiceImpl在子类中重写每个方法代码如下packagecom.powernode.mall.service.impl;/** * author 动力节点 * version 1.0 * className OrderServiceImplSub * since 1.0 **/publicclassOrderServiceImplSubextendsOrderServiceImpl{Overridepublicvoidgenerate(){longbeginSystem.currentTimeMillis();super.generate();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}Overridepublicvoiddetail(){longbeginSystem.currentTimeMillis();super.detail();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}Overridepublicvoidmodify(){longbeginSystem.currentTimeMillis();super.modify();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}}这种方式可以解决但是存在两个问题第一个问题假设系统中有100个这样的业务类需要提供100个子类并且之前写好的创建Service对象的代码都要修改为创建子类对象。第二个问题由于采用了继承的方式导致代码之间的耦合度较高。这种方案也不可取。第三种方案使用代理模式这里采用静态代理可以为OrderService接口提供一个代理类。packagecom.powernode.mall.service;/** * author 动力节点 * version 1.0 * className OrderServiceProxy * since 1.0 **/publicclassOrderServiceProxyimplementsOrderService{// 代理对象// 目标对象privateOrderServiceorderService;// 通过构造方法将目标对象传递给代理对象publicOrderServiceProxy(OrderServiceorderService){this.orderServiceorderService;}Overridepublicvoidgenerate(){longbeginSystem.currentTimeMillis();// 执行目标对象的目标方法orderService.generate();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}Overridepublicvoiddetail(){longbeginSystem.currentTimeMillis();// 执行目标对象的目标方法orderService.detail();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}Overridepublicvoidmodify(){longbeginSystem.currentTimeMillis();// 执行目标对象的目标方法orderService.modify();longendSystem.currentTimeMillis();System.out.println(耗时(end-begin)毫秒);}}这种方式的优点符合OCP开闭原则同时采用的是关联关系所以程序的耦合度较低。所以这种方案是被推荐的。编写客户端程序packagecom.powernode.mall;importcom.powernode.mall.service.OrderService;importcom.powernode.mall.service.OrderServiceProxy;importcom.powernode.mall.service.impl.OrderServiceImpl;/** * author 动力节点 * version 1.0 * className Client * since 1.0 **/publicclassClient{publicstaticvoidmain(String[]args){// 创建目标对象OrderServicetargetnewOrderServiceImpl();// 创建代理对象OrderServiceproxynewOrderServiceProxy(target);// 调用代理对象的代理方法proxy.generate();proxy.modify();proxy.detail();}}以上就是代理模式中的静态代理其中OrderService接口是代理类和目标类的共同接口。OrderServiceImpl是目标类。OrderServiceProxy是代理类。大家思考一下如果系统中业务接口很多一个接口对应一个代理类显然也是不合理的会导致类爆炸。怎么解决这个问题动态代理可以解决。因为在动态代理中可以在内存中动态的为我们生成代理类的字节码。代理类不需要我们写了。类爆炸解决了而且代码只需要写一次代码也会得到复用。动态代理在程序运行阶段在内存中动态生成代理类被称为动态代理目的是为了减少代理类的数量。解决代码复用的问题。在内存当中动态生成类的技术常见的包括JDK动态代理技术只能代理接口。CGLIB动态代理技术CGLIB(Code Generation Library)是一个开源项目。是一个强大的高性能高质量的Code生成类库它可以在运行期扩展Java类与实现Java接口。它既可以代理接口又可以代理类底层是通过继承的方式实现的。性能比JDK动态代理要好。底层有一个小而快的字节码处理框架ASM。Javassist动态代理技术Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba 千叶 滋所创建的。它已加入了开放源代码JBoss 应用服务器项目通过使用Javassist对字节码操作为JBoss实现动态AOP框架。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

舆情分析网站凡科模板建站

2025年LLM迎来六大范式变革:可验证奖励强化学习使模型展现推理能力;智力表现参差不齐;应用向专业化发展;个人电脑AI成为新范式;氛围编程降低门槛;图形界面交互改变AI交互方式。AI作为新型智能既超预期聪明又…

张小明 2026/1/7 5:02:26 网站建设

做免费网站教程做中文网站公司

第一章:你还在手动拼接JSON?Python模板化生成的3种高阶方法曝光在现代Web开发中,动态生成结构化JSON数据已成为高频需求。手动拼接字符串不仅易错,还难以维护。Python提供了多种优雅的模板化方式来自动生成JSON,提升开…

张小明 2026/1/7 5:02:25 网站建设

asp.ney旅游信息网站下载 简洁做网站流量

Linly-Talker数字人对话系统:从入门到精通完整指南 【免费下载链接】Linly-Talker 项目地址: https://gitcode.com/gh_mirrors/li/Linly-Talker Linly-Talker是一款基于大型语言模型与视觉模型融合的开源AI数字人对话系统,能够实现逼真的语音交互…

张小明 2026/1/7 7:05:32 网站建设

网站有什么到期免费推广产品的平台

摘要 随着信息技术的快速发展,教育领域对高效、智能化的教学辅助工具需求日益增长。传统的教学管理模式依赖人工操作,存在效率低、数据易丢失、信息更新滞后等问题,难以满足现代教育管理的需求。教学辅助系统信息管理系统的开发旨在解决这些问…

张小明 2026/1/7 7:05:30 网站建设

曲靖高端网站制作网站app开发价格

Excalidraw Logo演变史:设计理念解读 在远程协作成为常态的今天,我们越来越意识到一个事实:工具不仅是效率的载体,更是情绪和意图的延伸。当团队成员隔着屏幕讨论系统架构或产品流程时,一张过于规整、冷峻的流程图&am…

张小明 2026/1/7 7:05:28 网站建设

北京大学廉政建设研究中心网站手机上有趣的网站

微软 Office 2007 入门指南 1. 启动 Office 2007 应用程序 启动 Office 2007 应用程序有多种方式,最常见的两种方法如下: - 通过开始菜单启动 : 1. 点击“开始”按钮,显示开始菜单。 2. 选择“Microsoft Office Word 2007”。 - 通过桌面快捷方式启动 : 1. 双击…

张小明 2026/1/7 7:05:26 网站建设