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

怎么搜索整个网站内容相册网站源码php

怎么搜索整个网站内容,相册网站源码php,织梦网站名称标签,温州做网站哪家好责任链模式 本文链接#xff1a;https://blog.csdn.net/feather_wch/article/details/131760462 1、是一种行为型设计模式 2、主要角色 抽象处理者具体处理者 3、允许将请求沿着一系列处理者进行传递#xff0c;直到有一个处理者可以处理该请求 解耦请求 发送者 和 处理…责任链模式 本文链接https://blog.csdn.net/feather_wch/article/details/131760462 1、是一种行为型设计模式 2、主要角色 抽象处理者具体处理者 3、允许将请求沿着一系列处理者进行传递直到有一个处理者可以处理该请求 解耦请求 发送者 和 处理者可以动态改变处理者链条的顺序和内容 4、在Java中责任链模式有多种实现方式例如 使用抽象处理者类和具体处理者类每个处理者类都有一个指向下一个处理者的引用以及一个抽象的处理请求的方法。这种方式可以实现灵活的链构建和动态地添加或删除处理者。²使用过滤器接口和过滤器链类每个过滤器都实现了一个过滤方法过滤器链类负责将过滤器串联起来并提供一个执行过滤的方法。这种方式可以实现简单的责任链模式常用于对请求进行预处理或后处理。³使用注解和反射机制每个处理者都使用注解来标识自己的优先级或顺序通过反射机制来获取所有的处理者并按照注解来排序然后依次执行处理请求的方法。这种方式可以实现无侵入性的责任链模式不需要修改原有的代码结构。 优点和缺点 责任链模式的优点有 请求与处理解耦降低了系统的耦合度¹处理者只需要关心自己的处理逻辑不需要知道链条的结构和其他处理者的情况²易于维护可以灵活地增加或删除处理者符合开闭原则³ 责任链模式的缺点有 产生很多细粒度的对象增加了系统的复杂度和开销¹不一定能处理请求可能出现请求无人响应的情况需要提供默认处理和检查链条的有效性⁴ 实例日志处理-抽象处理者类和具体处理者类 // 定义日志级别常量 public class LogLevel {public static final int INFO 1;public static final int DEBUG 2;public static final int ERROR 3; }抽象处理者 // 定义抽象日志记录器类 public abstract class Logger {// 保存下一个日志记录器的引用protected Logger nextLogger;// 保存当前日志记录器的日志级别protected int level;// 设置下一个日志记录器public void setNextLogger(Logger nextLogger) {this.nextLogger nextLogger;}// 处理日志请求public void logMessage(int level, String message) {// 如果当前日志记录器的级别大于等于请求的级别则输出日志信息if (this.level level) {write(message);}// 如果存在下一个日志记录器则传递给它继续处理if (nextLogger ! null) {nextLogger.logMessage(level, message);}}// 抽象方法由具体子类实现protected abstract void write(String message); }具体处理者 // 定义具体日志记录器类控制台日志记录器 public class ConsoleLogger extends Logger {// 构造方法设置当前日志记录器的级别为INFOpublic ConsoleLogger() {this.level LogLevel.INFO;}// 实现write方法输出到控制台Overrideprotected void write(String message) {System.out.println(Console Logger: message);} }// 定义具体日志记录器类文件日志记录器 public class FileLogger extends Logger {// 构造方法设置当前日志记录器的级别为DEBUGpublic FileLogger() {this.level LogLevel.DEBUG;}// 实现write方法输出到文件这里简化为控制台Overrideprotected void write(String message) {System.out.println(File Logger: message);} }// 定义具体日志记录器类错误日志记录器 public class ErrorLogger extends Logger {// 构造方法设置当前日志记录器的级别为ERRORpublic ErrorLogger() {this.level LogLevel.ERROR;}// 实现write方法输出到错误日志这里简化为控制台Overrideprotected void write(String message) {System.out.println(Error Logger: message);} }// 定义客户端类 public class Client {public static void main(String[] args) {// 创建各个日志记录器对象Logger consoleLogger new ConsoleLogger();Logger fileLogger new FileLogger();Logger errorLogger new ErrorLogger();// 构建责任链设置每个日志记录器的下一个日志记录器consoleLogger.setNextLogger(fileLogger);fileLogger.setNextLogger(errorLogger);// 发送不同级别的日志请求观察输出结果consoleLogger.logMessage(LogLevel.INFO, This is an information.);consoleLogger.logMessage(LogLevel.DEBUG, This is a debug message.);consoleLogger.logMessage(LogLevel.ERROR, This is an error message.);} }输出结果 Console Logger: This is an information. Console Logger: This is a debug message. File Logger: This is a debug message. Console Logger: This is an error message. File Logger: This is an error message. Error Logger: This is an error message.从输出结果可以看出每个日志记录器都会根据自己的级别来决定是否输出日志信息并且会将请求传递给下一个日志记录器继续处理。这样就实现了责任链模式的功能。 实例二 责任链和OkHttp 1、OkHttp采用的哪种责任链模式 采用的是不纯的责任链模式每个拦截器都组装了响应的一部分 2、OkHttp定义了两个接口 Interceptor:Response r intercept(Chain c)Interceptor.Chain: Response r intercept(Request q)实现了Chain接口的内部类RealInterceptorChain 3、抽象处理者Interceptor Interceptor接口中只有一个方法intercept接收一个Chain对象作为参数返回一个Response对象作为结果。 4、具体处理者每个实现了Interceptor接口的类都负责处理响应的一部分并调用Chain对象的proceed方法来传递给下一个拦截器继续处理。 5、Chain接口中也只有一个方法proceed 接收一个Request对象作为参数返回一个Response对象作为结果Chain对象负责执行intercept方法并维护当前拦截器的索引和列表。 4、RealInterceptorChain类是Chain接口的具体实现类1. 包含了一个拦截器列表、一个网络连接对象、一个请求对象、一个响应对象、一个重试次数和一个索引。 2. 它在proceed方法中根据索引来获取当前拦截器 3. 并调用其intercept方法来处理请求和响应并将自身作为参数传递给下一个拦截器。 5、OkHttp和责任链模式的总结 Interceptor负责处理请求和响应的一部分Interceptor通过Chain.proceed()传递给下一个拦截器处理Chain会找到下一个拦截器并且执行器intercept()方法 6、RealInterceptorChain是什么 内部维护了List interceptorsproceed()方法中通过index找到下一个拦截器并且执行其intercept()方法返回其Response给上一层用于用户拦截器和网络拦截器 OkHttp源码流程 6、OkHttp拦截器执行流程是指OkHttp如何通过一系列的拦截器来实现网络请求和响应的处理的过程。 拦截器是一种可以对请求和响应进行修改或监控的组件它实现了Interceptor接口该接口只有一个方法intercept它接收一个Chain对象作为参数并返回一个Response对象作为结果。 Chain是一个接口它提供了一个方法proceed用于调用链中的下一个拦截器并维护当前拦截器的索引和列表。Chain对象负责执行intercept方法并将自身作为参数传递给下一个拦截器继续处理。 7、OkHttp中的拦截器 OkHttp中有多种拦截器它们可以对请求和响应进行修改或监控例如重试、重定向、缓存、连接、桥接等。³ 8、OkHttp拦截器执行流程大致如下 首先用户通过OkHttpClient发起一个网络请求该请求会被封装成一个Call对象并加入到任务队列中等待执行。⁴然后Call对象会被分配给一个异步线程来执行该线程会创建一个Transmitter对象用于管理请求的发送和取消。⁴【应用层拦截器】然后会创建拦截器列表。将用户添加的应用层拦截器添加到列表中interceptors.addAll(client.interceptors())通过OkHttpClient.addInterceptor方法添加【重试和重定向拦截器】接着将RetryAndFollowUpInterceptor对象作为第二个拦截器添加到拦截器列表中。该拦截器负责实现重试和重定向的功能。⁴【桥接拦截器】接着将BridgeInterceptor对象并将其作为第三个拦截器加入到拦截器列表中。该拦截器负责将用户构造的请求转换为向服务器发送的请求将服务器返回的响应转换为对用户友好的响应。⁴【缓存拦截器】然后会创建一个CacheInterceptor对象并将其作为第四个拦截器加入到拦截器列表中。该拦截器负责读取缓存、更新缓存、处理缓存策略等。⁴【链接拦截器】接着会创建一个ConnectInterceptor对象并将其作为第五个拦截器加入到拦截器列表中。该拦截器负责建立与服务器的连接并创建一个Exchange对象来管理连接的使用和释放。⁴【网络拦截器】然后将用户添加的网络层拦截器添加到列表中interceptors.addAll(client.networkInterceptors())通过OkHttpClient.addNetworkInterceptor方法添加【请求服务拦截器】接着创建一个CallServerInterceptor对象并将其作为最后一个拦截器加入到拦截器列表中。该拦截器负责从服务器读取响应并处理异常情况。⁴将拦截器列表作为参数构造出RealInterceptorChainresponse chain.proceed() 开始责任链的调用并且获取到响应 应用层拦截器 OkHttp应用层拦截器的使用方法有 创建一个实现了Interceptor接口的类 重写intercept方法该方法接收一个Chain参数代表当前的拦截器链可以通过chain.request()获取请求对象可以通过chain.proceed(request)获取响应对象也可以修改请求或者响应对象。 使用OkHttpClient.Builder().addInterceptor(interceptor)方法添加自定义的拦截器可以添加多个拦截器它们会按照添加的顺序执行。使用OkHttpClient.newCall(request)方法发起请求请求会经过所有的应用层拦截器然后到达网络层。 代码请求getResponseWithInterceptorChain // 用户通过OkHttpClient发起一个网络请求 Request request new Request.Builder().url(https://www.example.com).build(); OkHttpClient client new OkHttpClient(); Call call client.newCall(request);// Call对象被分配给一个异步线程来执行 call.enqueue(new Callback() {Overridepublic void onResponse(Call call, Response response) {// 处理响应结果}Overridepublic void onFailure(Call call, IOException e) {// 处理异常情况} });RealCall //依次执行拦截器链中的拦截器获取结果Response getResponseWithInterceptorChain() throws IOException {ListInterceptor interceptors new ArrayList();//添加自定义拦截器interceptors.addAll(client.interceptors());//添加重试和重定向拦截器interceptors.add(retryAndFollowUpInterceptor);//添加桥接拦截器interceptors.add(new BridgeInterceptor(client.cookieJar()));//添加缓存拦截器interceptors.add(new CacheInterceptor(client.internalCache()));//添加链接拦截器interceptors.add(new ConnectInterceptor(client));if (!forWebSocket) {//添加网络拦截器interceptors.addAll(client.networkInterceptors());}//添加连接服务器拦截器主要负责将我们的Http请求写进网络的IO流中interceptors.add(new CallServerInterceptor(forWebSocket));//构建拦截器链依次执行每一个拦截器Interceptor.Chain chain new RealInterceptorChain(interceptors, null, null, null, 0, originalRequest);return chain.proceed(originalRequest);}
http://www.pierceye.com/news/989624/

相关文章:

  • 宁德做网站的公司长沙网站建设 芙蓉区
  • 兴平市住房和城乡建设局门户网站会员管理网站建设
  • 做seo的网站是怎么样的上饶小程序开发公司
  • 网站硬件需求建网站网站
  • 网站主机域名合肥室内装修设计培训
  • 上海网站优化网站对企业的作用
  • 哪些园林网站可以做外链网址怎么注册
  • 做网站域名服务器wordpress 互动性
  • 微信网站欣赏好看的旅游网站模版
  • 甘肃省嘉峪关建设局网站wordpress android下载
  • wordpress 调用discuzseo营销是什么
  • 广州市律师网站建设怎么样建行网站会员注册用户名
  • 免费建站哪个好asp网站没有数据库
  • 文化馆网站建设方案建设中网站首页
  • 模板网站是什么郑州网站seo公司
  • 阿里云服务器网站开发正规品牌网站设计品牌
  • 网站突然搜不到了我是做装修什么网站可以
  • 外国网站在内地做seo食品网站模板
  • 网站推广名片wordpress 数据库查询数据库
  • 自己搭建的ftp怎么做网站线上推广员
  • 网站开发设计大赛北京seo招聘信息
  • 营销型网站是什么云南网站设计流程
  • 怎么做网站效果图广西网站建设运营费用
  • 怎么自己开发app软件无锡网站推广优化公司哪家好
  • 做网站原型的简单工具深圳网站建设美橙互联
  • 免费关键词挖掘网站wordpress发多少文章卡
  • html网站建设的步骤wordpress 自定义变量
  • 网站建设的意见建站公司有哪些服务
  • 广东美景园林建设有限公司网站陕西网络公司网站建设
  • 网站关键词怎么填写南昌网站建设一般多少钱一年