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

做网站手机版和电脑版怎么区分公司网站建设模块简介

做网站手机版和电脑版怎么区分,公司网站建设模块简介,建一个个人网站要多少钱,做设计在哪个网站找图片大全职责链模式 一、原理和实现二、实现方式1) 使用链表实现2) 使用数组实现3) 扩展 作用#xff1a;复用和扩展#xff0c;在实际的项目开发中比较常用。在框架开发中#xff0c;我们也可以利用它们来提供框架的扩展点#xff0c;能够让框架的使用者在不修改框架源码的情况下复用和扩展在实际的项目开发中比较常用。在框架开发中我们也可以利用它们来提供框架的扩展点能够让框架的使用者在不修改框架源码的情况下基于扩展点定制化框架的功能。 一、原理和实现 职责链模式的英文翻译是 Chain Of Responsibility Design Pattern。在 GoF 的《设计模式》中它是这么定义的 Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. 翻译成中文就是将请求的发送和接收解耦让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链并沿着这条链传递这个请求直到链上的某个接收对象能够处理它为止实时上在常见的使用场景中我们的责任链并不是和概念中的完全一样。 原始概念中是直到链上的某个接收对象能够处理它为止。实际使用中链上的所有对象都可以对请求进行特殊处理。 二、实现方式 1) 使用链表实现 第一种实现方式如下所示。其中Handler 是所有处理器类的抽象父类handle() 是抽象方法。每个具体的处理器类HandlerA、HandlerB的 handle() 函数的代码结构类似如果它能处理该请求就不继续往下传递如果不能处理则交由后面的处理器来处理也就是调用 successor.handle()。HandlerChain 是处理器链从数据结构的角度来看它就是一个记录了链头、链尾的链表。其中记录链尾是为了方便添加处理器。 public abstract class Handler {// 拥有具体的处理方法抽象protected Handler nextHandler;public void setNextHandler(Handler nextHandler) {this.nextHandler nextHandler;}abstract void handle(); }public class HandlerA extends Handler{Overridepublic void handle() {System.out.println(第一个过滤器);if (nextHandler ! null) {nextHandler.handle();}} }public class HandlerB extends Handler{Overridepublic void handle() {System.out.println(第二个过滤器);if (nextHandler ! null) {nextHandler.handle();}} }public class HandlerChain {private Handler head null;private Handler tail null;public void addHandler(Handler handler) {handler.setSuccessor(null);if (head null) {head handler;tail handler;return;}tail.setSuccessor(handler);tail handler;}public void handle() {if (head ! null) {head.handle();}} }// 使用举例 public class Application {public static void main(String[] args) {HandlerChain chain new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();} }实际上上面的代码实现不够优雅。处理器类的 handle() 函数不仅包含自己的业务逻辑还包含对下一个处理器的调用也就是代码中的 successor.handle()。一个不熟悉这种代码结构的程序员在添加新的处理器类的时候很有可能忘记在 handle() 函数中调用 successor.handle()这就会导致代码出现 bug。 针对这个问题我们对代码进行重构利用模板模式将调用 successor.handle() 的逻辑从具体的处理器类中剥离出来放到抽象父类中。这样具体的处理器类只需要实现自己的业务逻辑就可以了。重构之后的代码如下所示 public abstract class Handler {protected Handler successor null;public void setSuccessor(Handler successor) {this.successor successor;}public final void handle() {boolean handled doHandle();if (successor ! null !handled) {successor.handle();}}protected abstract boolean doHandle(); }public class HandlerA extends Handler {Overrideprotected boolean doHandle() {boolean handled false;//...return handled;} }public class HandlerB extends Handler {Overrideprotected boolean doHandle() {boolean handled false;//...return handled;} } // HandlerChain和Application代码不变2) 使用数组实现 我们再来看第二种实现方式代码如下所示。这种实现方式更加简单。HandlerChain 类用数组而非链表来保存所有的处理器并且需要在 HandlerChain 的 handle() 函数中依次调用每个处理器的 handle() 函数。 public interface IHandler {boolean handle(); }public class HandlerA implements IHandler {Overridepublic boolean handle() {boolean handled false;//...return handled;} } public class HandlerB implements IHandler {Overridepublic boolean handle() {boolean handled false;//...return handled;} }public class HandlerChain {private ListIHandler handlers new ArrayList();public void addHandler(IHandler handler) {this.handlers.add(handler);}public void handle() {for (IHandler handler : handlers) {boolean handled handler.handle();if (handled) {break;}}} } // 使用举例 public class Application {public static void main(String[] args) {HandlerChain chain new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();} }3) 扩展 在 GoF 给出的定义中**如果处理器链上的某个处理器能够处理这个请求那就不会继续往下传递请求。实际上职责链模式还有一种变体那就是请求会被所有的处理器都处理一遍不存在中途终止的情况。**这种变体也有两种实现方式用链表存储处理器和用数组存储处理器跟上面的两种实现方式类似只需要稍微修改即可。 我这里只给出其中一种实现方式如下所示。另外一种实现方式你对照着上面的实现自行修改。 public abstract class Handler {protected Handler successor null;public void setSuccessor(Handler successor) {this.successor successor;}public final void handle() {doHandle();if (successor ! null) {successor.handle();}}protected abstract void doHandle(); }public class HandlerA extends Handler {Overrideprotected void doHandle() {//...} }public class HandlerB extends Handler {Overrideprotected void doHandle() {//...} }public class HandlerChain {private Handler head null;private Handler tail null;public void addHandler(Handler handler) {handler.setSuccessor(null);if (head null) {head handler;tail handler;return;}tail.setSuccessor(handler);tail handler;}public void handle() {if (head ! null) {head.handle();}} }// 使用举例 public class Application {public static void main(String[] args) {HandlerChain chain new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();} }
http://www.pierceye.com/news/301801/

相关文章:

  • 芜湖seo网站优化淘宝官网首页手机版
  • 用付费网站做推广ui网站一般建好大
  • 四川建设行业网站有哪些最新体育新闻头条
  • 湘潭网站优化公司wordpress会员积分邀请
  • 腾讯网静态网站建设西宁网站建设公司排行
  • pc网站优势买完网站怎么建设
  • 网站设计与制作用什么软件外包加工网官网下载安装
  • 商城网站设计企业建一个o2o网站
  • 营销型网站创建php源码资源网
  • 优秀设计师网站在上海做兼职去哪个网站搜索
  • 教育行业网站建设房屋3d立体设计软件
  • 海珠免费网站建设php网站系统
  • 建设银行网站信息补充施工企业奖惩制度范本
  • 做拍卖网站多少钱办公室装修铺哪种地板
  • 国外网站有哪些平台网站系统建设需要什么资质
  • 做网站 就上凡科网做盗版网站会坐牢吗
  • 百事通网做网站做网站公众号多少钱
  • 影视作品网站开发与设计php做网站有哪些好处
  • 寻模板网站源码《基层建设》官方网站
  • 做网站龙岗深圳市网络seo推广平台
  • 公司资质查询官方网站网站建设开题报告
  • 桐城网站开发网站制作器手机版下载
  • 校友网站 建设网站开发都是使用框架吗
  • 手机网站字体大小规范优秀网站
  • 用动物做网站名称建设个人网站的策划书
  • 深圳网站开发公司宝网建设网站需要哪些素材
  • 网页设计需要学什么学历南宁seo服务公司
  • 网站开发学习未来做那个网站能致富
  • 建设厅科技中心网站免费网站怎么做出来的
  • 做一网站东莞网站建设