消灭成堆的分支语句之类责任链模式

  • 时间:
  • 浏览:2
  • 来源:彩神幸运飞艇_神彩幸运飞艇官方

这段代码先检查用户的现金不是足够支付当前货物的价格,原因分析分析 余额缺陷则执行代码块A,怎么让再查看当前货物与不是促销活动,有就执行代码块B。其中代码块B咋眼看并能if (onSale)这另一个 条件,但原因分析分析 它存在else块中,什么都 还隐含了(cash >= price)四种 条件。在代码规模都有很大的之前 ,什么都 的隐含条件影响原因分析分析 不大,但原因分析分析 有什么都 个else条件怎么让上面一并还嵌套着深会的分支形状,当你看完最深层的代码时,你不是还确信此人 能清楚地记得所有的前提条件?

一些人 并不成之类分支为“数据型分支”。它犹如数学中的映射(Mapping),每一组特定的输入数据对应一组唯一的输出数据。怎么让,在输入数据比较简单时(比如第另一个 例子,输入数据并能系统名字一项),并能使用 java.util.Map 或 java.util.Properties 把映射关系持久化到配置文件中,应用程序启动时加进去去载到内存:

基于什么都 的框架,它的代码总量我知道你比什么都 的要多,但你不再需用在一堆if else中仔细推敲代码执行的前提条件,所有的前提条件都有accept函数里;加进去去新的功能所要做的仅需实现另一个 新的类,并不修改现有代码,符合开闭原则。

分支话语是所有编程语言的基本元素,比如Java语言中的if else和switch话语,它们提供四种 能力允许应用程序根据一些条件动态地选者执行一些代码块。四种 动态性给应用程序带来了什么都 的灵活性!

根据分支话语的特点,它可用于根据不同的输入返回特定的输出。比如《没法理解面向对象》一文中要根据系统名字,输出不同的提示语:

上面代码使用了服务加载功能自动实例化所有注册过的Handler子类,原因分析分析 你还不了解它的原理,可查看相应的API文档。有了哪几种代码,原因分析分析 万事具备!我知道你你原因分析分析 发现,什么都 的设计和JDBC的接口不谋而合:Manager对应java.sql.DriverManager、Handler对应java.sql.Driver、RequestHandler哪几种类则对应数据库厂商此人 实现的驱动应用程序。

本文中介绍了四种 法律土办法在我的实际开发中运用什么都 。比如昨天分享的“微信版开窗游戏”什么都 用“类责任链模式”结合“情况表模式”实现的(不过它都有用Java写的)。原因分析分析 你有一些法律土办法来处置上述问题图片,欢迎留言交流。感想你耐心地读删剪文!

接下来还需用另一个 额外的管理类负责哪几种类的实例化的请求的整理:

在应用应用程序四种 端则需用动态地构造查询话语:

PS:其实消灭分支话语的法律土办法还有什么都 ,我知道我能 继续写另一个 系列~嘿嘿。

根据实际的情况表,代码原因分析分析 更复杂一些,比如value的内容需用转义等。什么都 设计的系统会非常灵活,比如输入端新增了另一个 选项,只需给metadata加进去去新的字段,并根据所有的合法值插入新的记录或更新现有记录,而代码并不修改。

首先,它的可读性不好。这里说的可读性不好并不指变量名命名不规范、花括号风格不一致、对齐不统一等问题图片,什么都 指代码不是方便理解。比如:

其中配置文件信息如下:

怎么让,每个RequestHandler都需提供另一个 接口判断此人 并能处置当前请求;原因分析分析 能处置,则Client调用什么都 执行的接口:

正原因分析分析 if else没法方便没法灵活,什么都 代码中它都会被滥用,就像下面什么都 我能 崩溃的、嵌套的、成堆的分支话语:

于是,上面的分支形状对应另一个 独立的Handler类:

本文会讨论一些应用程序设计的法律土办法,把诸如上述的混乱代码重构成更清晰更优雅的代码。注:文中的代码皆为Java代码片段,仅使用标准JDK的类库。

其次,它的维护性不好。比如在上面代码中加入会员机制,会员在购买商品时有积分,那相应的积分模块调用代码要一并冒出在block B和block C中。原因分析分析 过都会员又分了多个等级,那这段代码减慢就成了庞然大物,任何的修改都会牵一发而动全身!

上面介绍的查表法把元数据从逻辑代码中剥离出来,处置因元数据(Metadata)变化原因分析分析 修改应用程序。但从四种 意义上来说,应用程序本该没法:应用程序四种 什么都 逻辑的集合;元数据(辅助应用程序行为,诸如语言包文件)集中在配置文件里;待处置的数据来自内部管理输入(用户手工录入、本地文件、数据库等)。怎么让本节讨论分支话语更常用的法律土办法:选者执行某段代码。

使用四种 法律土办法,能很方便地支持新的系统或修改现有系统的提示语,且并不修改应用程序。不过开发中真实的输入项远不止另一个 字符串,正如

之类上面的代码,根据不同的输入选项或命令行参数等调用不同的法律土办法来完成一些操作,而都有当纯的返回数据。怎么让,哪几种选项是为了选者现在四种 request是谁的职责,而这正是“责任链模式”要处置的问题图片!本节的标题为“类责任链模式”,表示我的处置方案是之类“责任链模式”,并不严格和它保持一致,但核心思想是一致的:使多个对象都有原因分析分析 处置请求。

同学之前 在 http://www.oschina.net/code/snippet_111708_17599 中提的:根据交易类型、支付法律土办法等多个条件返回另一个 字符串。处置四种 Key有多个元素构成的情况表,处置方案的思想和单元素是一致的,什么都 把元数据移到了数据库中:

说上述代码形状我能 崩溃,一些人 得有理有据。

四种 持久化到数据库的法律土办法适用于一对一的无规律映射,即不存在原因分析分析 并能大量的映射存在多组key对应同另一个 value的情况表。它和数据的规模无关,比如另一个 字典应用程序的数据同样适用四种 法律土办法,数据量其实很大但并不稀疏。

与之相对的是稀疏的数据,比如有一项值域范围是[1,1150],其中1到150应对的值是无规律,从51到1150的值删剪是另一个 固定的常量(比如0)。这之前 有一半的存储空间是浪费的,真心不如在代码里用 if (value > 150) 来判断。下文会提供另四种 法律土办法处置之类问题图片。